当前位置: 首页 > 后端技术 > Python

APP自动化工具uiautomator2

时间:2023-03-26 12:14:29 Python

一、简介uiautomator2是uiautomator的升级版,uiautomator是谷歌开发的用于Android自动化测试的Java库,uiautomator2将uiautomator中的接口封装成一个Python库。因此,它支持的语言是Python。优点主要总结如下:环境搭建简单方便,执行速度快。说起来安装很简单)2.安装python的uiautomator2库pipinstalluiautomator23,安装atx-agentpython-muiautomator2init这一步的目的是从github上下载atx-agent作为服务器推送到手机上,所以首先要保证adb可以链接到手机或者模拟器安装成功后,可以在模拟器桌面上看到一个小车的图标。这是atx.apk。如果安装失败,您可以手动安装。这是我在网上找的教程:https://blog.csdn.net/qq_24741027/article/details/1180520754。安装weditorpip3安装weditorweditor是一个基于浏览器的UI元素查看器。如果安装报错,官网解决方法是:通过git拉取weditor文件到本地安装,经测试没有安装成功gitclonehttps://github.com/openatx/weditorpip3install-eweditor已通过多项测试。原因是python版本和weditor版本不一致。我用的python是3.9.6,weditor最新版本是0.6.7。使用weditor==0.6.4版本安装成功pipinstallweditor==0.6.4安装完成后,在命令行输入python-mweditor自动打开浏览器,在页面输入模拟器的设备序列号,点击连接,然后点击DumpHierarchyisrefreshed,就可以看到模拟器的界面了。注意:(个人遇到的问题)命令行安装启动时会出现编码问题。site-packages\weditor\web\handlers下的shell.py文件会根据相应报错进行更改。字节转字符串3.操作示例链接手机或模拟器(链接方式有很多种,可以是ip,端口,也可以是设备号)importuiautomator2asu2d=u2.connect("127.0.0.1:62001")connect(“10.0.0.1:7912”)connect("10.0.0.1")#使用默认的7912portconnect("http://10.0.0.1")connect("http://10.0.0.1:7912")connect("cff1123ea")#adb设备序列号检测是否链接成功,打印d.info获取设备信息,即链接打开成功,再打印d.info。结果中的currentPackageName为启动指定应用的包名。语法为:d.app_start("指定包名")默认方法是先通过atx-agent解析apk包的mainActivity,然后调用amstart-n$package/$activity启动d.app_start("指定包名",use_monkey=True)当第一种方式无法打开app时,使用第二种方式打开使用monkey-pcom.example.hello_world-candroid.intent.category.LAUNCHER1这个方法有一个副作用,它会自动锁定手机的旋转关闭并打开weditorUI查看器python-mweditor将鼠标移到搜索上点击,可以看到有很多定位方式可以选择,对于example:resourceId,xpath,text隐式等待语法d.implicitly_wait(waitingtime)单位是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="follow").click(),然后就可以使用get_text()方法获取文本值,使用assert断言assertd(text="Follow").get_text()=="Follow"点击定位d.click(0.341,0.188)输入内容d.send_keys("rice")获取屏幕大小d.window_size()滑动屏幕操作d.swipe(sx,sy,ex,ey,0.5)滑动屏幕操作是uiautomator2中的swipe()方法,类似于appium,sx,ex和sy,ey分别代表起点坐标和终点坐标,比如我们要向下滑动5次,那么可以写一个for循环。这里有几点需要注意:为了提高屏幕滑动的稳定性,需要加入强制等待,等待(根据情况设置)的滑动距离尽可能大,比如起点和终点y轴的值可以分别设置为0.9、0.1,如果设置为0.9、0.5,很可能滑动距离太小,导致滑动不过去。uiautomator2还提供了一个扩展的swipe函数swipe_ext(),它不需要坐标,只需要提供一个方向,比如“左”、“右”、“上”、“下”。试验后感觉不太稳定,所以还是用常规的方法停止app,清理环境。在这里,我使用了app_stop()和app_clear()方法d.app_stop("com.xxx.client.android")d.app_clear("com.xxx.client.android")语法总结