没有合适的资源?快使用搜索试试~ 我知道了~
首页appium的java实现+appium原理
资源详情
资源评论
资源推荐

!
1. 搭建环境#
!
1.1. Appiu m 简介(
1.1.1. 工具简介#
这是一个开源、跨平台的测试框架,可以用来测试原生、混合的移动端应用。支持 IOS、Andriod 及 Firefox 平台。!
使用的 WebDriver 的 json!wire 协议,来驱动 apple 系统的 UIAutomation 库、Android 系统的 UIAutomator 框架。!
同时也继承了 Selendroid 来支持老的 Android 版本。!
支持的语言:java、object-c、JavaScript、php、python、ruby、c#、ciojure 或者 perl 语言,更可以使用 selenium!WebDriver 的 API。系统支持任何框
架。!
如果只使用 apple 的 UIAutomation,就只能用 js 来编写 case,且只能用 instruction 来运行。如果只使用 google 的 UIAutomator,就只能用 java 来
写 case。!
Appium 支持采用 client-server 设计模式,只要 clent 能够发送 http 请求给 server,那么 client 用什么语言来实现都是可以的,也就支持了多语言。!
1.1.2. 环境搭建要求:#
1. Win7!+ !framework4 .5 !
2. JDK1.6 或者 JD K1 .7!
3. Eclipse4.3!+!ADT+Junit4(testNG)!
4. Android!SDK!API! ≥17!
17 以上,封装的是 UIAutomator,可以跨应用。17 以下封装的 Robotium,不能够跨应用。!
5. Appium-forWin7!
6. Java/python 脚本!
!

!
第 2 页!
!
1.2. Demo 实例(
1.2.1. 新建 java 工程#
!
1.2.2. 新建 floder(apps、libs)#
!
1.2.3. 配置 build#path#
选择 project->右键 build!path->Configure!Build!Path…或者直接选择 Add! !! !! ExternalArchives…!
Appium 类库:java-client-4.2.2.jar,http://appium.io/downloads.html
Selenium 客户端及服务端:selenium-java-2.53.0.zip 和 selenium-server-standalone-2.53.0.jar!

!
第 3 页!
!
!
1.2.4. 新建 class#
!
1.2.5. 编写脚本#
AppiumTestLianjia.java!
1.2.6. 运行#
右键->!run!as!->!JunitTest!

!
第 4 页!
!
1.3. Appiu m 原理(
!
拿 java 脚本做例子来说明!
Java 脚本! 和 socket4837 通信!
Server 控制 bootstrap,Uiaumator! 在手机中!
Bootstrap 和 UIAutomatorServer 通信可能不稳定!
Bootstrap 是 Appium 运行在安卓目标测试机器上的一个 UiAutomator 测试脚本,该脚本的唯一一个测试方法所做的事情是在目
标机器开启一个 socket 服务器来把一个 session 中 Appium 从 PC 端过来的命令发送给 UiAutomator 来执行处理
定义说明了 bootstrap 在 appium 和 uiautomator 中究竟处于一个什么样的角色:
• 首先,它是一个 uiautomator 的测试脚本,它的入口类 Bootstrap 继承于 UiAutomatorTestCase,所以 UiAututomator
可以正常运行它,它也可以正常的使用 uiautomator 的方法,这个就是 appium 的命令可以转换成 uiautomator 的命令
的关键
• 其次,它是一个 socket 服务器,它专门监听 4724 端口过来的 appium 的连接和命令数据,并把 appium 的命令转换成
uiautomator 的命令来让 uiautomator 进行处理
• 最后,它处理的是 appium 从 pc 端过来的命令,而非一个文件。这在初次接触 appium 的朋友是很容易困惑的,以为
appium 是整个脚本文件发送到目标机器再由 bootstrap 进行分析处理的,事实并非如此
!
Appium
原理小结
Api 接口调用 selenium 的接口,Android 底层用 Android 的 instrumentation(API2.3+ 通过绑定另外一个独立的 selendroid 项目来实现的)、
uiautomator 接口(API4.2+),iOS 底层用 iOS 的 uiautomation 接口。
Client/ServerArchitecture

!
第 5 页!
!
Appium server 是用 Node.js 写的,安装 Node.js 可以直接用 npm 命令或 dmg,server 端功能:监听一个端口,接收 client 发送来的 command,
翻译这些命令,把这些 command 转成移动设备可以理解的形式发送给移动设备,然后移动设备执行完 command 后把执行结果返回给
appium server,appium 再把执行结果返回给 client。
Client 其实就是发起 command 的设备,一般来说就是执行代码的机器,执行 appium
测试
代码的机器,可以把 client 理解成代码,这些代码可以
是 Java、Python、ruby、js,只要实现了 webdriver 标准协议就可以。
跨语言:只要支持 selenium webdriver api 和这种语言相关的 client libraries 就可以。Server 放在任意机器上,哪怕是云服务器都可以(appium 和
webdriver 天生适合云测试)。
Session
session 就是一个会话,在 webdriver/appium,你 的 所 有 工 作 永 远 都 是 在 session start 后才可以进行的。一般来说,通过 POST /session 这个 URL,
然后传入 Desired Capabilities 就可以开启 session 了。
开启 session 后,会返回一个全局唯一的 sessionid,以后几乎所有的请求都必须带上这个 session id,因为这个 seesion id 代表了你所打开的浏
览器或者是移动设备的模拟器。
进一步思考一下,由于 session id 是全局唯一,那么在同一台机器上启动多个 session 就变成了可能,这也就是 selenium gird 所依赖的具体理论
根据。
Desired Capabilities
Desired Capabilities 携带了一些配置信息。从本质上讲,这个东东是 key-value 形式的对象。你可以理解成是 Java 里的 map,Python 里的字典,
ruby 里的 hash 以及 js 里的 json 对象。实际上 Desired Capabilities 在传输时就是 json 对象。
Desired Capabilities 最重要的作用是告诉 server 本次测试的上下文。这次是要进行浏览器测试还是移动端测试?如果是移动端测试的话是测试
android 还是 ios,如 果 测 试 android 的话那么我们要测试哪个 app? server 的这些疑问 Desired Capabilities 都必须给予解答,否则 server
不买账,自然就无法完成移动 app 或者是浏览器的启动。
Appium Clients
原生的 webdriver api 是为 web 端设计的,appium 官方提供了一套 appium client,为不同的语言的开发者可以测试自己的 app,测试的时候,一
般要使用这些 client 库去替换原生的 webdriver 库。算是 client 对原生 webdriver 进行了一些移动端的扩展。
!
1.4. 版本变化小结(
appium0.18.x
到
appium1.x
的改变
1.
新的客户端库
appium 客户端库取代原来的 webdriver 客户端库
from appium import webdriver 取代 fromselenium import webdriver
2.
新的
capabilities
选项
不再使用 device、version,使用 platformName、platformVersion、deviceName、automationName(“Selendroid”如果是 api2.3 以上要选择,默
认可以不填),udid(ios 要指定设备标示)。
之前的 app 这项 capability 保留不变,但该项现在专门用在非 browser 类型的 app 上面,要测试 Safari 或 Chrome 浏览器应用,要使用标准的
browserName,app 和 browserName 都是专用的选项。
同时我们也用骆驼命名法重新统一命名了我们的 Appium Server 的 capabilities。比如说原来的 app-package 和 app-wait-activity 将改成
appPackage 和 appWaitActivity。当然,鉴于我们能自动检测到 Android 应用的包和 activity,所以你可以大多时候忽略掉这些选项了。
3.
我们把以下的控件查找器策略给移除掉了:
name
tag name
我们现在引入了 accessibility_id 这个策略来取代原来 name 所做的事情(译者注:也就是说原来的 AppiumDriver.findElementByName 将会被现
在的 AppiumDriver.findElementByAccessibilityId 取代)。当中细节将会根据你使用的 Appium 客户端(译者注:客户端语言)而有所不
同。
剩余71页未读,继续阅读
















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0