干货|一文搞定 uiautomator2 自动化测试工具使用

一、背景简介

Google 官方提供了一个 Android 自动化测试工具(Java 库),基于 Accessibility 服务,功能很强,可以对第三方 App 进行测试,获取屏幕上任意一个 App 的任意一个控件属性,并对其进行任意操作,但有两个缺点:

测试脚本只能使用 Java 语言;
测试脚本要打包成 jar 或者 apk 包上传到设备上才能运行;
实际工作中,我们希望测试逻辑能够用 Python 编写,能够在电脑上运行的时候就控制手机。所以基于这个目的开发了 python-uiautomator2 自动化测试开源工具,其封装了谷歌自带的 uiautomator2 测试框架,可以运行在支持 Python 的任一系统上,目前版本为 V2.10.2。

GitHub 开源地址:

https://github.com/openatx/uiautomator2

二、工作原理

在这里插入图片描述

如图所示,python-uiautomator2 主要分为两个部分,python 客户端,移动设备

python 端: 运行脚本,并向移动设备发送 HTTP 请求;
移动设备:移动设备上运行了封装了 uiautomator2 的 HTTP 服务,解析收到的请求,并转化成 uiautomator2 的代码;
整个过程:

在移动设备上安装 atx-agent(守护进程),随后 atx-agent 启动 uiautomator2 服务(默认 7912 端口)进行监听;
在 PC 上编写测试脚本并执行(相当于发送 HTTP 请求到移动设备的 server 端);
移动设备通过 WIFI 或 USB 接收到 PC 上发来的 HTTP 请求,执行制定的操作;

三、安装与启动

3.1 安装 uiautomator2
使用 pip 安装

pip install -U uiautomator2
安装完成后,使用如下 python 代码查看环境是事配置成功

说明:后文中所有代码都需要导入 uiautomator2 库,为了简化我使用 u2 代替,d 代表 driver
import uiautomator2 as u2# 连接并启动d = u2.connect() print(d.info)
能正确打印出设备的信息则表示安装成功
在这里插入图片描述

注意:需要安装 adb 工具,并配置到系统环境变量,才能操作手机。
安装有问题可以到 issue 列表查询:

https://github.com/openatx/uiautomator2/wiki/Common-issues
3.2 安装 weditor
weditor 是一款基于浏览器的 UI 查看器,用来帮助我们查看 UI 元素定位。

因为 uiautomator 是独占资源,所以当 atx 运行的时候 uiautomatorviewer 是不能用的,为了减少 atx 频繁的启停,就需要用到此工具

使用 pip 安装

1
pip install -U weditor
  查看安装是否成功

1
weditor --help
  出现如下信息表示安装成功

运行 weditor

1
python -m weditor#或者直接在命令行运行weditor

四、元素定位

4.1 使用方法
1
d(定位方式 = 定位值)#例:element = d(text=‘Phone’)#这里返回的是一个列表,当没找到元素时,不会报错,只会返回一个长度为 0 的列表#当找到多个元素时,会返回多个元素的列表,需要加下标再定位element[0].click()#获取元素个数print(element.count)

4.2 支持的定位方式
ui2 支持 android 中 UiSelector 类中的所有定位方式,详细可以在这个网址查看 developer.android.com/reference/a…

整体内容如下 , 所有的属性可以通过 weditor 查看到

名称描述

texttext 是指定文本的元素textContainstext 中包含有指定文本的元素textMatchestext 符合指定正则的元素textStartsWithtext 以指定文本开头的元素classNameclassName 是指定类名的元素classNameMatchesclassName 类名符合指定正则的元素descriptiondescription 是指定文本的元素descriptionContainsdescription 中包含有指定文本的元素descriptionMatchesdescription 符合指定正则的元素descriptionStartsWithdescription 以指定文本开头的元素checkable可检查的元素,参数为 True,Falsechecked已选中的元素,通常用于复选框,参数为 True,Falseclickable可点击的元素,参数为 True,FalselongClickable可长按的元素,参数为 True,Falsescrollable可滚动的元素,参数为 True,Falseenabled已激活的元素,参数为 True,Falsefocusable可聚焦的元素,参数为 True,Falsefocused获得了焦点的元素,参数为 True,Falseselected当前选中的元素,参数为 True,FalsepackageNamepackageName 为指定包名的元素packageNameMatchespackageName 为符合正则的元素resourceIdresourceId 为指定内容的元素resourceIdMatchesresourceId 为符合指定正则的元素

4.3 子元素和兄弟定位
元素定位

child()

1
#查找类名为 android.widget.ListView 下的 Bluetooth 元素d(className=“android.widget.ListView”).child(text=“Bluetooth”)# 下面这两种方式定位有点不准确,不建议使用d(className=“android.widget.ListView”).child_by_text(“Bluetooth”,allow_scroll_search=True)d(className=“android.widget.ListView”).child_by_description(“Bluetooth”)

兄弟元素定位
sibling()

1
#查找与 google 同一级别,类名为 android.widget.ImageView 的元素d(text=“Google”).sibling(className=“android.widget.ImageView”)

链式调用
1
d(className=“android.widget.ListView”, resourceId=“android:id/list”) \ .child_by_text(“Wi‑Fi”, className=“android.widget.LinearLayout”) \ .child(className=“android.widget.Switch”) \ .click()

4.4 相对定位
相对定位支持在left, right, top, bottom, 即在某个元素的前后左右

1
d(A).left(B),# 选择 A 左边的 Bd(A).right(B),# 选择 A 右边的 Bd(A).up(B), #选择 A 上边的 Bd(A).down(B),# 选择 A 下边的 B#选择 WIFI 右边的开关按钮d(text=‘Wi‑Fi’).right(resourceId=‘android:id/widget_frame’)

4.5 元素常用 API
表格标注有 @property 装饰的类属性方法,均为下方示例方式

1
d(test=“Settings”).exists

方法

描述返回值备注

exists()判断元素是否存在True,Flase@propertyinfo()返回元素的所有信息字典@propertyget_text()返回元素文本字符串

set_text(text)设置元素文本None

clear_text()清空元素文本None

center()返回元素的中心点位置(x,y)基于整个屏幕的点

exists 其它使用方法:

1
d.exists(text=‘Wi‑Fi’,timeout=5)
  info() 输出信息:

1
{ “bounds”: { “bottom”: 407, “left”: 216, “right”: 323, “top”: 3

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值