uiautomator2 使用

初始化

部署相关的守护进程。

电脑连接上一个手机或多个手机, 确保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()
原文地址:https://www.cnblogs.com/helloTerry1987/p/11440819.html