分享

uiautomatorviewer的工具安装和使用

 雨夜的博客 2021-09-17

一、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

python -m uiautomator2 init

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

配置手机设备参数:

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

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

定位元素:

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

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

1、安装:

pip install --pre --upgrade weditor

2、使用:

python3 -m weditor

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

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

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

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

编写测试脚本 这里参考怎么去定位元素,在定位元素和启动APP 相对比APPium 要简单很多 这里针对魅族社区App进行测试。

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)
# 停止
appd.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 打开微信小程序并进行授权 代码如下:

#链接设备
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()
打开APP,并进行登录:#定位driver
driver = u2.connect_usb("L081")
#启动app
driver.app_start("com.XXX.XXXX")
#通过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()

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多