Google 官网提供了一个 Android 自动化测试工具(Java 库),基于 Accessibility 服务,性能很强,能够对第三方 App 进行测试,获取屏幕上任意一个 App 的任意一个控件属性,并对其进行任意操作,但有两个毛病:
1. 测试脚本只能应用 Java 语言;
2. 测试脚本要打包成 jar 或者 apk 包上传到设施上能力运行;
理论工作中,咱们心愿测试逻辑可能用 Python 编写,可能在电脑上运行的时候就管制手机。所以基于这个目标开发了 python-uiautomator2 自动化测试开源工具,其封装了谷歌自带的 uiautomator2 测试框架,能够运行在反对 Python 的任一零碎上,目前版本为 V2.10.2。
GitHub 开源地址:
如图所示,python-uiautomator2 次要分为两个局部,python 客户端,挪动设施
- python 端: 运行脚本,并向挪动设施发送 HTTP 申请;
- 挪动设施:挪动设施上运行了封装了 uiautomator2 的 HTTP 服务,解析收到的申请,并转化成 uiautomator2 的代码;
整个过程:
3. 在挪动设施上装置 atx-agent(守护过程),随后 atx-agent 启动 uiautomator2 服务 (默认 7912 端口) 进行监听;
4. 在 PC 上编写测试脚本并执行(相当于发送 HTTP 申请到挪动设施的 server 端);
5. 挪动设施通过 WIFI 或 USB 接管到 PC 上发来的 HTTP 申请,执行制订的操作;
应用 pip 装置
装置实现后,应用如下 python 代码查看环境是事配置胜利
阐明:后文中所有代码都须要导入 uiautomator2 库,为了简化我应用 u2 代替,d 代表 driver
能正确打印出设施的信息则示意装置胜利
留神:须要装置 adb 工具,并配置到零碎环境变量,能力操作手机。
装置有问题能够到 issue 列表查问:
weditor 是一款基于浏览器的 UI 查看器,用来帮忙咱们查看 UI 元素定位。
因为 uiautomator 是独占资源,所以当 atx 运行的时候 uiautomatorviewer 是不能用的,为了缩小 atx 频繁的启停,就须要用到此工具
应用 pip 装置
查看装置是否胜利
呈现如下信息示意装置胜利
运行 weditor
ui2 反对 android 中 UiSelector 类中的所有定位形式,具体能够在这个网址查看 https://developer.android.com…
整体内容如下 , 所有的属性能够通过 weditor 查看到子元素定位
child()
兄弟元素定位
sibling()
链式调用
绝对定位反对在 left, right, top, bottom, 即在某个元素的前后左右
表格标注有 @property 装璜的类属性办法,均为下方示例形式
exists 其它应用办法:
info() 输入信息:
能够通过上方信息别离获取元素的所有属性
因为 Java uiautoamtor 中默认是不反对 xpath,这是属于 ui2 的扩大性能,速度会相比其它定位形式慢一些
在 xpath 定位中,ui2 中的 description 定位须要替换为 content-desc,resourceId 须要替换为 resource-id
应用办法
Android<4.3 时不能应用拖动
滑动有两个,一个是在 driver 上操作,一个是在元素上操作
元素上操作
从元素的核心向元素边缘滑动
driver 上操作
即对整个屏幕操作
driver 滑动的扩大办法,能够间接实现滑动,不须要再本人封装定位点
android>4.3
对元素操作
封装好的放大放大操作
设置 scrollable 属性为 True;
滚动类型:horiz 为程度,vert 为垂直;
滚动方向:
- forward 向前
- backward 向后
- toBeginning 滚动至开始
- toEnd 滚动至最初
- to 滚动间接某个元素呈现
所有办法均返回 Bool 值;
5.8.1 输出自定义文本
5.8.2 输出按键
两种办法
目前 press 反对的按键如下
keyevent 是通过“adb shell input keyevent”形式输出,反对按键更加丰盛
更多具体的按键信息 https://developer.android.com…
5.8.3 输入法切换
5.8.4 模仿输入法性能
能够模仿的性能有 go,search,send,next,done,previous。
如果应用 press 输出按键有效,能够尝试应用此办法输出
应用 wather 进行界面的监控,能够用来实现跳过测试过程中的弹框
当启动 wather 时,会新建一个线程进行监控
能够增加多个 watcher
用法
2.11.0 版本 新增了一个 watch_context 办法 , 写法相比 watcher 更简洁,官网举荐应用此办法来实现监控,目前只反对 click() 这一种办法。
这里能够用来实现图案解锁
应用 touch 类
这个感觉是比拟有用的一个性能,能够在测试用例开始时录制,完结时进行录制,而后如果测试 fail。则上传到测试报告,完满还原操作现场,具体原理前面再去钻研。
首先须要下载依赖,官网举荐应用镜像下载:
执行录制:
下载与录制视频同一套依赖。
这个性能是首先手动截取须要点击指标的图片,而后 ui2 在界面中去匹配这个图片,目前我尝试了准确试不是很高,正点率十分高,不倡议应用。
能够从本地门路及 url 下载安装 APP,此办法无返回值,当装置失败时,会抛出 RuntimeError 异样
默认当利用在运行状态执行 start 时不会敞开利用,而是持续放弃以后界面。
如果须要打消后面的启动状态,则须要加 stop=True 参数。
stop 和 clear 的区别是完结利用应用的命令不同
stop 应用的是“am force-stop”
clear 应用的是“pm clear”
卸载全副利用返回的包名列表并肯定是卸载胜利了,最好应用 verbose=true 打印一下信息,这样能够查看到是否卸载胜利
或者能够批改一下源码,使其只输入胜利的包名,正文的为减少的代码,未正文的是源码
connect() 能够应用如下其它形式进行连贯
8.2.1 获取 driver 信息
8.2.2 获取设施信息
会输入测试设施的所有信息,包含电池,CPU,内存等
8.2.3 获取屏幕分辨率
8.2.4 获取 IP 地址
8.3.1 应用 settings 设置
查看 settings 默认设置
批改默认设置,只须要批改 settings 字典即可
8.3.2 应用办法或者属性设置 - http 默认申请超时工夫
- 当设施掉线时,期待设施在线时长
- 元素查找默认等待时间
- 关上 HTTP debug 信息
- 休眠
value 值参考,只有是元组中的任一一个值就能够。
关上告诉栏
关上疾速设置
8.7.1 导入文件
8.7.2 导出文件
应用 shell 办法执行
8.8.1 执行非阻塞命令
output 返回的是一个整体的字符串,如果须要抽取值,须要对 output 进行解析提取解决
8.8.2 执行阻塞命令(继续执行的命令)
源码形容
因为有 atx-agent 的存在,Uiautomator 会被始终守护着,如果退出了就会被重新启动起来。然而 Uiautomator 又是王道的,一旦它在运行,手机上的辅助性能、电脑上的 uiautomatorviewer 就都不能用了,除非关掉该框架自身的 uiautomator
应用代码进行
手动进行
间接关上 ATX APP(init 胜利后,就会装置上),点击敞开 UIAutomator
以上,欢送大家一起交换探讨。