乐趣区

关于android:APP自动化工具uiautomator2

一、介绍

uiautomator2 是 uiautomator 的升级版,uiautomator 是 Google 开发的一款用来做安卓自动化测试的 Java 库,uiautomator2 则是将 uiautomator 中的接口封装成了 Python 库。因而它反对的语言为 Python

长处次要概括如下:

  环境搭建简略不便
  执行速度很快
  UI 元素定位便捷好用、可视化好
  获取 toast 非常简单 

二、环境部署

1、装置 adb 并配置环境变量 (这个就不多讲了,装置很简略)
2、装置 python 的 uiautomator2 库

pip install uiautomator2

3、装置 atx-agent

python-m uiautomator2 init

 这一步的目标是从 github 上下载 atx-agent,推送到手机,作为服务端,因而先要保障 adb 能够链接到手机或者模拟器
装置胜利后,能够看到模拟器桌面呈现一个小汽车图标,这个就是 atx.apk
 如果装置失败,能够手动装置
这是网上找的一个教程:https://blog.csdn.net/qq_24741027/article/details/118052075

4、装置 weditor

pip3 install weditor

weditor 是基于浏览器的 UI 元素查看器

如果装置报错,官网解决方案为:通过 git 将 weditor 文件拉到本地装置,通过测试并未装置胜利
git clone https://github.com/openatx/weditor
pip3 install -e weditor
 通过屡次测试起因是 python 版本和 weditor 版本不统一
我用的 python 是 3.9.6,weditor 目前最新版本是 0.6.7
应用 weditor==0.6.4 版本装置胜利
pip install weditor==0.6.4
装置好后,在命令行输出 python -m weditor 会主动关上浏览器,在页面上输出模拟器的设施序列号,点击 Connect,而后点击 Dump Hierarchy 刷新,能够看到模拟器的界面

留神:(集体遇到的问题)
装置好启动命令行会有编码问题,site-packages\weditor\web\handlers 下的 shell.py 文件,依据相应的报错将 byte 转换为字符串

三、操作示例

链接手机或者模拟器 (链接形式有多种,ip、端口、或者设施号)

import uiautomator2 as u2
d = u2.connect(“127.0.0.1:62001”)

connect(“10.0.0.1:7912”)
connect(“10.0.0.1”) # use default 7912 port
connect(“http://10.0.0.1”)
connect(“http://10.0.0.1:7912”)
connect(“cff1123ea”) # adb device serial number

检测是否链接胜利,打印 d.info 能够取得设施信息代表链接胜利

关上 app,而后打印 d.info,失去的后果里的 currentPackageName 即是包名

启动指定的 app,其语法是:

d.app_start(“ 指定的包名 ”)

 默认的这种办法是先通过 atx-agent 解析 apk 包的 mainActivity,而后调用 am start -n $package/$activity 启动 

d.app_start(“ 指定的包名 ”, use_monkey=True)

 当第一种形式打不开 app 时,应用第二种打开方式
应用 monkey -p com.example.hello_world -c android.intent.category.LAUNCHER 1 启动
这种办法有个副作用,它主动会将手机的旋转锁定给关掉

关上 weditor UI 查看器

python -m weditor

 鼠标挪动到搜寻点击一下,能够看到有多种定位形式可抉择,例:resourceId、xpath、text

隐性期待语法

d.implicitly_wait(期待时长) 单位是 s, 默认 20 秒

 每一步操作须要加上等待时间,因为下一步的元素控件并不会立刻呈现
隐性期待只须要加一次,全局通用,在期待时长内元素呈现就会进行下一步操作,而不像强制期待始终要等够设置的时长。因而隐性期待绝对比拟节约工夫

元素定位形式示例

resourceId 定位形式 

d(resourceId=’com.xxx.client.android:id/xxx’).click()

xpath 定位形式 

d.xpath(‘//*[@resource-id=”com.xxx.client.android:id/xxx”]’).click()

 依据文本内容定位 

d(text=” 关注 ”).click()
而后能够应用 get_text() 办法拿到文本值,应用 assert 进行断言
assert d(text=” 关注 ”).get_text() == “ 关注 ”

 点击定位 

d.click(0.341, 0.188)

 输出内容 

d.send_keys(“ 大米 ”)

 获取屏幕尺寸 

d.window_size()

滑屏操作

d.swipe(sx,sy,ex,ey,0.5)

 滑屏操作在 uiautomator2 中是 swipe() 办法,和 appium 相似,sx, ex 和 sy,ey 别离示意终点和起点的坐标

比方咱们要向下滑 5 次,因而能够写个 for 循环。这里有几点须要留神下:为了进步屏幕滑动的稳定性,须要退出强制期待,期待 (依据状况自行设定)s
滑动间隔尽量大点,比方 y 轴终点起点能够设置系数别离为 0.9, 0.1,如果你设置为 0.9,0.5,很可能会呈现滑动间隔太小,导致没有滑过去的状况

uiautomator2 还提供了一个扩大的滑动性能,swipe_ext(),不须要坐标,只需提供方向如 "left",“right”,“up”,“down”。通过试验,感觉不太稳固,因而还是采纳惯例的办法

进行 app 并清理环境,这里应用 app_stop() 和 app_clear() 办法

d.app_stop(“com.xxx.client.android”)
d.app_clear(“com.xxx.client.android”)

语法总结

退出移动版