APP自动化之uiautomator2 +python3 UI自动化

题记: 之前一直用APPium直到用安卓9.0  发现uiautomatorviewer不支持安卓 9.0,点击截屏按钮 一直报错,百度很久解决方法都不可以,偶然间看见有人推荐:uiautomator2 就尝试使用 发现比appium要简单一些; 下面文字主要来自虫师的博客

 

一、Uiautomator2原理介绍

1.uiautomator2是一个可以使用Python对Android设备进行UI自动化的库。其底层基于Google uiautomator,Google提供的uiautomator库可以获取屏幕上任意一个APP的任意一个控件属性,并对其进行任意操作,目前仅支持android平台的原生应用测试,https://github.com/openatx/uiautomator2。但有两个缺点:

    测试脚本只能使用Java语言。
    测试脚本必须每次被上传到设备上运行。

2.工作原理

分为两个部分:

PC上的python端:运行脚本,并向系统设备发送http请求

移动设备:移动设备上运行了封装了uiautomator2的HTTP服务,解析收到的请求,并转化成uiautomator2的代码。

二、安装uiautomator2

pip install --pre uiautomator2

pip install pillow

三、初始化

部署相关的守护进程。

电脑连接上一个手机或多个手机, 确保adb已经添加到环境变量中,执行下面的命令会自动安装本库所需要的设备端程序:uiautomator-server 、atx-agent、openstf/minicap、openstf/minitouch

1
python -m uiautomator2 init

 

安装完成,设备上会多一个uiautomator的应用。

配置手机设备参数:

有两种方法,一种是通过WIFI,另一种是通过USB数据线将手机链接电脑。 (我是通过USB这个方法,按照后手机会多一个ATX小汽车图标的软件)

WiFi连接更方便一点,需要保持PC和手机使用的一个WIFI,查看手机连接WIFI的IP地址。

 

定位元素:

我们可以借助Android SDK自的uiautomatorviewer查看元素,这就要求手机必须以USB的方式连接PC,我前面使用的是WIFI连接进行连接的。所以,openatx提供了另外一个工具weditor 来解决这个问题。

GitHub地址:https://github.com/openatx/weditor

1、安装:

1
pip install --pre --upgrade weditor

 

2、使用:

1
python -m weditor

 如果不能成功打开,可以尝试先执行

1
2
3
python -m uiautomator2 init
 
python -m weditor

  

默认会通过浏览器打开页面:http://atx.open.netease.com/

下面这个跟用uiautomatorviewer定位元素是一样的 而且多了xpath的定位语句,用起来更方便,

在页面左上角选择Android,输入设备IP(192.168.31.234),点击Connect按钮。

当我们操作完手机后,可以点击“Reload”按钮进行刷新,从而保持与设备上的界面保持同步。weditor 还可以帮我们生成代码。总之,你研究一下就会用了。

 

编写测试脚本 这里参考怎么去定位元素,在定位元素和启动APP 相对比APPium  要简单很多

这里针对魅族社区App进行测试。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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()

小结:其实关注该项目已经好几个月了,目前该项目已经趋于稳定,整个测试环境的搭建过程也要比Appium简单得多。

 

我是练习分割线


 

在尝试对APP进行登录的时候发现一个问题,在用APPium 是可以隐藏键盘进行输入, 用uiautomator2 发现不可以 ,一直卡主键盘没法办收起来提交失败;

最后尝试用物理返回,成功解决,

下面尝试用uiautomator2 打开微信小程序并进行授权 代码如下:

1
2
3
4
5
6
7
8
9
10
#链接设备
driver = u2.connect_usb("XXXX")
#打开APP
driver.app_start("com.tencent.mm")
 
time.sleep(3)
#下拉操作
driver.swipe(0.513,0.399, 0.513,0.6)
#通过文本定位打开小程序
driver(text="XX").click()<br><br>

 打开APP,并进行登录:

1
2
3
4
5
6
7
8
9
#定位driver<br>driver = u2.connect_usb("L081")<br>#启动app
driver.app_start("com.XXX.XXXX")<br>#通过id定位输入框输入账号密码
driver(resourceId="com.XXX.XXXX:id/login_username_et").set_text("test")
driver(resourceId="com.XXX.XXXX:id/login_password_et").send_keys("123456")
#通过物理返回,收齐键盘
driver.press("back")
time.sleep(2)
#点击登录
driver(resourceId="com.XXX.XXXX:id/login_commit_btn").click()

 疑问:在校验还没涉及  如果有朋友涉及  请不吝赐教,谢谢

 

 

 

下面是原文链接和一些用法介绍:

原文:

https://www.cnblogs.com/fnng/p/8486863.html

用法:

https://blog.csdn.net/ricky_yangrui/article/details/81415365

官方文档:

https://github.com/openatx/uiautomator2

 

posted @   沙丘蚂蚁慢慢爬  阅读(8799)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示