一、介绍

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/weditorpip3 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")

语法总结