Appium工作原理
脚本请求 ——> 4723端口appium server ——> 解析参数给PC端4724端
口 ——> 发送给设备4724端口 ——> 通过设备4724端口发给bootstrap.jar —
—> Bootstrap.jar把命令发给uiautomator
Json Wire Protocol:
它是一种协议,遵循REST风格,以JSON方法进行传输,是一系列的键值对,
遵循W3C WebDriver Spec设计风格;appium中的Json wire protocol继承自
selenium的webdriver wire protocol,并进行了扩展,使得Json wire protocol能
够控制不同的移动设备的行为。
bootstrap:
bootstrap在appium中是以jar包的形式存在的,它的功能是作为一个socket
服务,把Appium sever 发送的请求转化成uiautomator的命令来让uiautomator进
行处理。
在创建session成功之前,appium就已将bootstrap.jar放入手机中,并开启
设备上的基于appium bootstrap的socket服务,绑定本机和boostrap通信的端口
号4724用于和Android设备通讯,默认监听4724端口,等待client的连接。
Uiautomator:
UiAutomator是Google提供的用来做安卓自动化测试的一个Java库,基于
Accessibility服务。功能很强,可以对第三方App进行测试。它的初始版本发布
在Android 4.3 (API level 18)及以上的android系统版本
Selendroid:
Selendroid和UiAutomator类似,也是Google提供的一个安卓自动化测试软
件,适用于Android系统的本地应用程序和移动web的UI混合测试。它主要应用
在 Android 4.2 (API level 17) 及以下的android系统版本
Instruments:
Instruments 一个很灵活的、强大的工具,是性能分析、动态跟踪 和分析
OS X以及iOS代码的测试工具,appium ios封装了apple的 Instruments框架,主
要使用Instruments里的UI Automation(Apple的自动化测试框架),然后在设
备中注⼊入bootstrap.js进⾏行监听。
Desired Capabilities:
Desired Capabilities携带了一些配置信息。从本质上讲,它是key-value形
式的对象。可以理解成是java里的map,python里的字典,ruby里的hash以及js
里的json对象。实际上Desired Capabilities在传输时就是json对象。
Desired Capabilities最重要的作用是告诉appium server本次测试的上下文。
比如:
本次测试是启动浏览器还是启动移动设备?
是启动andorid还是启动ios?
启动android时,app的package是什么?
启动android时,app的activity是什么?
....
appium server的这些疑问Desired Capabilities都必须给予解答,否则appium
server就无法完成移动app或者是浏览器的启动。
Desired Capabilities常用键值对介绍:
automationName:使用哪种自动化引擎。appium(默认)还是Selendroid。
platformName: 平台的名称,iOS, Android, or FirefoxOS
platformVersion:移动设备的系统版本号,7.1, 4.4
deviceName: 设备名称,Android:可随意填写; IOS:instruments -s devices
udid:连接的物理设备的唯一设备标识 adb devices 可获取
app:本地绝对路径_或_远程 http URL 所指向的一个安装包(.ipa,.apk,或 .zip
文件)。Appium 将其安装到合适的设备上。如果指定了 appPackage 和
appActivity 参数,Android 则不需要此参数了。该参数也与 browserName 不兼
容。
browserName:测试的web浏览器,如果是测app则忽略
newCommandTimeout :用于客户端在退出或者结束 session 之前,Appium 等
待客户端发送一条新命令所花费的时间(秒为单位)
noReset:在当前session前不重置app状态,默认值为 false
fullReset:(iOS)删除所有的模拟器文件夹。(Android) 要清除 app 里的数据,请
将应用卸载才能达到重置应用的效果。在 Android, 在 session 完成之后也会将
应用卸载掉。默认值为 false
Desired Capabilities android特有键值对介绍:
appPackage:运行的 Android 应用的包名
appActivity:Activity 的名字是指从你的包中所要启动的 Android acticity。通常
需要再前面添加‘.’
unicodeKeyboard:使用 Unicode 输入法。 默认值为 false
resetKeyboard:在设定了 unicodeKeyboard 关键字的 Unicode 测试结束后,重
置输入法到原有状态。如果单独使用,将会被忽略。默认值为 false
noSign:跳过检查和对应用进行 debug 签名的步骤。仅适用于 UiAutomator,
不适用于 selendroid。 默认值为 false
最全:
https://github.com/appium/appium/blob/master/docs/cn/writing-runningappium/
caps.md
Desired Capabilities 使用实例:
1、定义一个Desired Capabilities配置的字典
des = {
'platformName': 'Android',
'platformVersion': '9.0',
'deviceName': 'Samsung Galaxy S9',
'appPackage': 'com.ibox.calculators', #包名
'appActivity': '.CalculatorActivity', #app入口
'udid': '192.168.56.101:5555', # genymotion设备
'noReset': True,
'unicodeKeyboard': True,
'resetKeyboard': True,
}
2、把配置的字典作为请求参数发送给appium服务器
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', des)
uiautomatorviewer定位工具:
元素定位主要用来获取元素信息,获取元素信息后才能用appium提供的相
关API去识别和操作元素。
使用步骤:
1、在虚拟机或真机上打开要识别的app
2、在命令窗口输入 uiautomatorviewer 命令
3、然后点击Device Screenshot按钮连接手机
Appium Inspector定位工具:
打开Appium-Desktop之后,启动Appium服务,单击该页面右上角的第一个
“Start Inspector Session”按钮,如下:
就会启动一个新的会话窗口。如下图:
连接成后,跳转至设备页面,即可进行元素定位,如图:
Appium Inspector定位工具界面介绍:
Selecte Elements :根据元素定位
Swipe By Coordinates:根据坐标滑动页面
Tap By Coordinates:根据坐标点击操作
Back:返回
Refresh Source & Screenshot:刷新界面与截图
Start Recording:录制按钮,能自动生成自动化脚本
Search for element:在App Source中搜索元素
Copy XML Source to Clipboard :复制XML源代码到
Quit Session & Close Inspector:退出会话或结束
Source:源代码显示区域
Actions:
Selected Element:被选中元素信息显示
Appium Inspector 录制功能: