前言
很早以前,我用uiautomator+java实践过Android APP自动化测试,不过今天要提的不是uiautomator,而是uiautomator2。听起来uiautomator2像是uiautomator的升级版,但是这两款框架仅仅是名字上比较相似,实际上没有任何关联。
一、uiautomator/uiautomator2的前生今世
项目地址:https://github.com/openatx/uiautomator2
1.官方文档介绍
2.梳理一下脉络
- 先有的谷歌uiautomator,但是只支持java;
- 后来一个名为hexiaocong的开发者基于uiautomator封装了python版本,支持python代码运行;
- 而受其启发,uiautomator2作者开发了uiautomator2。所以它们的诞生顺序应该是:uiautomator(谷歌版)-->uiautomator(python版)-->uiautomator2
3.三款框架对比
框架 |
支持语言 |
特点 |
uiautomator |
java |
谷歌开源,仅支持Android |
xiaocong/uiautomator |
python |
开源,仅支持Android |
uiautomator2 |
python |
开源,仅支持Android |
二、uiautomator2简介
1.项目组成
- uiautomator-server:主服务
- minicap:实现实时屏幕投频,以及实时截图
- minitouch:用于精确实时控制设备
- atx-agent:运行在设备上的驻守程序,go开发,用于保活设备上相关的服务
- weditor:类似于uiautomatorviewer,专门为本项目开发的辅助编辑器
2.工作原理
1)各部分职责
- Python:编写脚本,向移动设备发起http请求;
- 移动设备:运行了封装了uiautomator2的http服务,解析python脚本发起的请求,并转化成uiautomator2可识别的代码;
2)运行过程
- 移动设备上运行atx-agent守护进程,随后atx-agent启动uiautomator2服务,默认7912端口进行监听;
- 在PC上编写python脚本并执行(相当于发送 HTTP 请求到移动设备的 server 端);
- 移动设备通过 WIFI 或 USB 接收到 PC 上发来的 HTTP 请求,执行指定的操作,从而操作移动设备;
三、环境搭建
1.安装uiautomator2
2.初始化设备
初始化成功会出现如下提示
当PC或Linux服务器连接了多台adb device的情况下,“python -m uiautomator2 init”默认初始化的是所有设备,若指定设备初始化,则需使用“--serial”参数:
3.init时都干了啥?
执行“python -m uiautomator2 init”命令,会自动往手机上安装一堆东西:
- app-uiautomator.apk
- app-uiautomator-test.apk
- atx-agent
- minicap
- minitouch
更多信息详见:https://github.com/openatx/uiautomator2/wiki/Manual-Init
四、基础操作
1.连接设备
uiautomator2提供了3种连接方式
1)通过WiFi连接
2)通过USB连接
3)通过ADB WiFi连接
2.命令行工具
1)截图
2)获取当前APP报名及Activity
3)卸载应用
4)停止应用
3.元素定位
1)常见定位方式
ui2支持 android 中 UiSelector 类中的所有定位方式,详细可以查看官网:https://developer.android.com/reference/android/support/test/uiautomator/UiSelector,以下仅列出几种常见的定位方式:
定位方式 |
描述 |
text |
通过文本定位 |
textMatches |
通过文本正则匹配定位 |
className |
通过类名定位 |
classNameMatches |
通过类名正则匹配定位 |
description |
通过desc属性定位 |
descriptionMatches |
通过desc属性正则匹配定位 |
resourceId |
通过resourceId定位 |
resourceIdMatches |
通过resourceId正则匹配定位 |
2)子元素定位及兄弟元素定位
① 子元素定位-child
② 兄弟元素定位-sibiling
③ 链式调用
3)相对定位
4) Xpath定位
Java uiautoamtor中默认不支持xpath,这是属于ui2的扩展功能,速度会相比其它定位方式慢一些。在xpath定位中,ui2中的description 定位需要替换为content-desc,resourceId 需要替换为resource-id
4.元素常用API
方法 |
描述 |
返回值 |
备注 |
exists() |
判断元素是否存在 |
True,Flase |
@property |
info() |
返回元素的所有信息 |
字典 |
@property |
get_text() |
返回元素文本 |
字符串 |
|
set_text(text) |
设置元素文本 |
None |
|
clear_text() |
清空元素文本 |
None |
|
center() |
返回元素的中心点位置 |
(x,y) |
基于整个屏幕的点 |
send_keys() |
发送文本 |
用法示例:
5.设备交互
1)单击/双击
2)长按
3)滑动
4)拖动
5)双指操作(元素放大/缩小)
6)等待元素出现/消失
7)屏幕滚动
8)文本框操作
9)toast操作
10)监控操作
更多api详见:https://github.com/openatx/uiautomator2
五、weditor元素定位
1.启动weditor服务
2.访问weditor
默认端口17310,访问地址:http://localhost:17310/,手机连接PC(确保已开启USB调试模式),点击Connect连接设备,当Connect图标变为绿色表示连接成功。
3.界面调试
weditor提供了所操作即所得式的元素定位方式,当双击屏幕上的图标或按钮,weditor界面右侧的Coding框会同步展现元素操作的代码,同时手机界面也会相应同步切换页面。
感谢
部分内容参考以下:
https://www.cnblogs.com/fnng/p/8486863.html
https://testerhome.com/topics/11357