初始化
部署相关的守护进程。
电脑连接上一个手机或多个手机, 确保adb已经添加到环境变量中,执行下面的命令会自动安装本库所需要的设备端程序:uiautomator-server 、atx-agent、openstf/minicap、openstf/minitouch
python -m uiautomator2 init
安装完成,设备上会多一个uiautomator的应用(ATX)。打开页面如下:
测试
编写以下脚本进行验证:
python import uiautomator2 as u2 d = u2.connect('10.59.8.231')//查看手机连接IP地址 print(d.info) //打印手机信息 exit() //退出python
运行结果:
定位元素:
我们可以借助Android SDK自的uiautomatorviewer查看元素,这就要求手机必须以USB的方式连接PC,我前面使用的是WIFI连接进行连接的。所以,openatx提供了另外一个工具weditor 来解决这个问题。
GitHub地址:https://github.com/openatx/weditor
1、安装:
pip install --pre --upgrade weditor
安装成功如下:
2、使用:
python -m weditor
默认会自动通过浏览器打开页面:http://localhost:17310/
两种连接方式(推荐第2种):
- 使用WIFI连接
- 获取手机网络IP地址,确保电脑可以PING通手机IP,输入IP地址后点击Connect进行连接,此种方式用下来会很卡。
- 代码示例:d = u2.connect('192.168.0.100')
- 使用USB连接
- 手机通过数据线连接电脑,命令行输入adb devices获取手机序列号,输入序列号后点击Connect进行连接。
- 代码示例:d = u2.connect('123456df')
当我们操作完手机后,可以点击“Dump Hierarchy”按钮进行刷新,启动实时,从而保持与设备上的界面保持同步。
小结:这里基本不会有什么坑,按照以上流程会ok~
编写测试脚本
这里直接拿过来,后面待细细研究
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()