一、Uiautomator2原理介绍
1.uiautomator2是一个可以使用Python对Android设备进行UI自动化的库。其底层基于Google uiautomator,Google提供的uiautomator库可以获取屏幕上任意一个APP的任意一个控件属性,并对其进行任意操作,目前仅支持android平台的原生应用测试,https://github.com/openatx/uiautomator2。但有两个缺点:
2.工作原理
分为两个部分:
PC上的python端:运行脚本,并向系统设备发送http请求
移动设备:移动设备上运行了封装了uiautomator2的HTTP服务,解析收到的请求,并转化成uiautomator2的代码。
3.整个过程
以下解释直接引用网址:https://testerhome.com/topics/11357
① 在移动设备上安装atx-agent(守护进程), 随后atx-agent启动uiautomator2服务(默认7912端口)进行监听
② 在PC上编写测试脚本并执行(相当于发送HTTP请求到移动设备的server端)
③ 移动设备通过WIFI或USB接收到PC上发来的HTTP请求,执行制定的操作
4.初始化:部署相关守护进程:atx-agent
在cmd中:python -m uiautomator2 init
如果守护进程UiAutomator关闭了,该命令就需要执行一遍,即便可以通过wifi进行测试执行,但在此之前需要使用数据线连接电脑,执行python -m uiautomator2 init
安装提示success
即可
5。安装weditor(UI Inspector)
因为uiautomator是独占资源,所以当atx运行的时候uiautomatorviewer是不能用的,为了减少atx频繁的启停,我们开发了基于浏览器技术的weditor UI查看器。https://github.com/openatx/weditor
安装方法
pip install --pre -U weditor
Windows系统可以使用命令在桌面创建一个快捷方式
python -m weditor --shortcut
命令行启动 python -m weditor
会自动打开浏览器,输入设备的ip或者序列号,点击Connect即可。
具体参考文章:浅谈自动化测试工具python-uiautomator2
6.用法
atx-agent
之后,设备可以和电脑通过WiFi链接,设备上的atx-agent
安装完成后会自动提示手机的IP是多少(模拟器另说)。下文中我们用device_ip
这个变量来表示手机的IP,这个IP唯一标示一个设备。
如果手机的WiFi跟电脑不是一个网段的,不能使用WiFi互联功能,需要通过数据线将手机连接到电脑上,使用命令adb forward tcp:7912 tcp:7912
将手机上的服务端口7912转发到电脑上,然后使用device_ip=127.0.0.1
连接该手机。
python-uiautomator2连接手机的方式有两种,一种是通过WIFI,另外一种是通过USB。两种方法各有优缺点。
WIFI最便利的地方要数可以不用连接数据线,USB则可以用在PC和手机网络不在一个网段用不了的情况。
使用WIFI连接
手机获取到手机的IP,并确保电脑可以PING通手机。手机的IP可以在设置-WIFI设置里面获取到。
比如手机的IP是192.168.0.100
,连接设备的代码为
import uiautomator2 as u2
d = u2.connect('192.168.0.100')
使用USB连接
手机的序列号可以通过adb devices
获取到,假设序列号是123456f
,连接代码为
import uiautomator2 as u2
d = u2.connect_usb('123456f')
注:如果守护进程关闭了,
需要执行一遍,即便可以通过wifi进行测试执行,但在此之前需要使用数据线连接电脑,执行python -m uiautomator2 init,否则会报如下错误:
Failed to establish a new connection: [WinError 10061] 由于目标计算机积极拒绝,无法连接。',)'