Python那些事——如何用 Python 测试 Android 应用

介绍
uiautomator2 是一个可以使用python对android设备进行ui自动化的库。其底层基于google uiautomator,google提供的uiautomator库可以获取屏幕上任意一个app的任意一个控件属性,并对其进行任意操作,但有两个缺点:
1、测试脚本只能使用java语言。
2、测试脚本必须每次被上传到设备上运行。 我们希望测试能够用一个更脚本化的语言,例如python编写,同时可以每次所见即所得地修改测试、运行测试。
安装
安装uiautomator2
pip install --pre uiautomator2pip install pillow初始化
部署相关的守护进程。
电脑连接上一个手机或多个手机, 确保adb已经添加到环境变量中,执行下面的命令会自动安装本库所需要的设备端程序:uiautomator-server 、atx-agent、openstf/minicap、openstf/minitouch
python -m uiautomator2 init安装完成,设备上会多一个uiautomator的应用。
配置手机设备参数:
有两种方法,一种是通过wifi,另一种是通过usb数据线将手机链接电脑。
wifi连接更方便一点,需要保持pc和手机使用的一个wifi,查看手机连接wifi的ip地址。
测试
编写以下脚本进行验证:
import uiautomator2 as u2d = 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地址:
1、安装:
pip install --pre --upgrade weditor2、使用:
python3 -m weditor默认会通过浏览器打开页面:
在页面左上角选择android,输入设备ip(192.168.31.234),点击connect按钮。
当我们操作完手机后,可以点击reload按钮进行刷新,从而保持与设备上的界面保持同步。weditor 还可以帮我们生成代码。总之,你研究一下就会用了。
编写测试脚本
这里针对魅族社区app进行测试。
import uiautomator2 as u2from time import sleepd = u2.connect('192.168.31.234')# 启动appd.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)# 停止appd.app_stop(com.meizu.mzbbs)appstart()和appstop()用于启动和停止应用。
常用的定位方式:
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简单得多。