uiautomator2 是一个可使用Python对Android设备进行UI自动化的库。其底层基于Google uiautomator,Google提供的uiautomator库能够获取屏幕上任意一个APP的任意一个控件属性,并对其进行任意操做,但有两个缺点:python
一、测试脚本只能使用Java语言。android
二、测试脚本必须每次被上传到设备上运行。 咱们但愿测试可以用一个更脚本化的语言,例如Python编写,同时能够每次所见即所得地修改测试、运行测试。nginx
安装
安装uiautomator2git
pip install --pre uiautomator2 pip install pillow
初始化
部署相关的守护进程。github
电脑链接上一个手机或多个手机, 确保adb已经添加到环境变量中,执行下面的命令会自动安装本库所须要的设备端程序:uiautomator-server 、atx-agent、openstf/minicap、openstf/minitouchsql
python -m uiautomator2 init
安装完成,设备上会多一个uiautomator的应用。浏览器
配置手机设备参数:markdown
有两种方法,一种是经过WIFI,另外一种是经过USB数据线将手机连接电脑。app
WiFi链接更方便一点,须要保持PC和手机使用的一个WIFI,查看手机链接WIFI的IP地址。工具
测试
编写如下脚本进行验证:
import uiautomator2 as u2 d = u2.connect('192.168.31.234') print(d.info)
运行结果:
{'currentPackageName': 'com.meizu.flyme.launcher', 'displayHeight': 1920, 'displayRotation': 0, 'displaySizeDpX': 360, 'displaySizeDpY': 640, 'displayWidth': 1080, 'productName': 'meizu_PRO5', 'screenOn': True, 'sdkInt': 24, 'naturalOrientation': True}
定位元素:
咱们能够借助Android SDK自的uiautomatorviewer查看元素,这就要求手机必须以USB的方式链接PC,我前面使用的是WIFI链接进行链接的。因此,openatx提供了另一个工具weditor 来解决这个问题。
GitHub地址:https://github.com/openatx/weditor
一、安装:
pip install --pre --upgrade weditor
二、使用:
python3 -m weditor
默认会经过浏览器打开页面:http://atx.open.netease.com/
在页面左上角选择Android,输入设备IP(192.168.31.234),点击Connect按钮。
当咱们操做完手机后,能够点击“Reload”按钮进行刷新,从而保持与设备上的界面保持同步。weditor 还能够帮咱们生成代码。总之,你研究一下就会用了。
编写测试脚本
这里针对魅族社区App进行测试。
import uiautomator2 as u2 from time import sleep d = u2.connect('192.168.31.234') # 启动App d.app_start("com.meizu.mzbbs") # 搜索 d(resourceId="com.meizu.mzbbs:id/j0").click() # 输入关键字 d(resourceId="com.meizu.mzbbs:id/p9").set_text("flyme") # 搜索按钮 d(resourceId="com.meizu.mzbbs:id/tp").click() sleep(2) # 中止app d.app_stop("com.meizu.mzbbs")
app_start()和app_stop()用于启动和中止应用。
经常使用的定位方式:
-
ResourceId定位:
d(resourceId="com.meizu.mzbbs:id/tp").click() -
Text定位:
d(text="精选").click() -
Description定位:
d(description="..").click() -
ClassName定位:
d(className="android.widget.TextView").click()
小结:其实关注该项目已经好几个月了,目前该项目已经趋于稳定,整个测试环境的搭建过程也要比Appium简单得多。