uiautomator2 简介
UiAutomator是Google提供的用来做安卓自动化测试的一个Java库,基于Accessibility服务。功能很强,可以对第三方App进行测试,获取屏幕上任意一个APP的任意一个控件属性,并对其进行任意操作。而uiautomator2便是UiAutomator的Python实现
除了对原有的库的bug进行了修复,还增加了很多新的Feature。主要有以下部分:
- 设备和开发机可以脱离数据线,通过WiFi互联(基于atx-agent)
- 集成了openstf/minicap达到实时屏幕投频,以及实时截图
- 集成了openstf/minitouch达到精确实时控制设备
- 修复了xiaocong/uiautomator经常性退出的问题
- 代码进行了重构和精简,方便维护
- 实现了一个设备管理平台(也支持iOS) atxserver2
- 扩充了toast获取和展示的功能
相关链接如下:
UiAutomator:https://developer.android.com/training/testing/ui-automator.html
uiautomator2: https://github.com/openatx/uiautomator2
QUICK_REFERENCE: https://github.com/openatx/uiautomator2/blob/master/QUICK_REFERENCE.md
安装
由于python实现的,在此可以使用pip
直接安装即可,命令如下
1 | # # 如果是在Windows平台下,未做`python3` 与 `python` 的link,在这里使用`python` 而不是`python3` |
Tips: 建议使用虚拟环境
开发版安装
1 | python3 -m pip install --upgrade --pre uiautomator2 |
源码安装
需要git客户端,若未安装git,可移步
https://git-scm.com/downloads
进行下载,当然,源码也可以使用zip的方式进行下载,请自行探索
1 | git clone https://github.com/openatx/uiautomator2 |
校验
先准备一台(不要两台)开启了开发者选项
的安卓手机,连接上电脑,确保执行adb devices
可以看到连接上的设备。如下图所示
运行python3 -m uiautomator2 init
安装包含httprpc服务的apk到手机+atx-agent, minicap, minitouch
在过去的版本中,这一步是必须执行的,但是从1.3.0之后的版本,当运行python代码
u2.connect()
时就会自动推送这些文件了
1 | import uiautomator2 as u2 |
app开启与关闭
当我们需要打开对应的app时,需要知道对应设备的包名。获取包名有两种方式
- 在设备上打开对应的app,获取当前app包名(
app_current()
) - 获取全部的应用包(
app_list_running()
)
1 | # 开启app |
Example
此时笔者的测试手机在已经打开app
1 | #!/usr/bin/env python3 |
Tips: 复习一下adb command
1 | # adb 命令 -- 获取报包名 |
点击
Turn on/off screen
1
2d.screen_on() # turn on the screen
d.screen_off() # turn off the screenPress hard/soft key
1
2
3d.press("home") # press the home key, with key name
d.press("back") # press the back key, with key name
d.press(0x07, 0x02) # press keycode 0x07('0') with META ALT(0x02)These key names are currently supported:
home、back、
left、right、up、down
center、menu、search
enter、delete ( or del)
recent (recent apps)
volume_up、volume_down、volume_mute
camera、power
Click on the screen
1 | d.click(x, y) |
- Double click
1 | d.double_click(x, y) |
- long_click
1 | d.long_click(x, y) |
滑动
Swipe
1 | # Swipe |
swipe_ext
1 | d.swipe_ext("right") # 手指右滑,4选1 "left", "right", "up", "down" |
Drag
1 | d.drag(sx, sy, ex, ey) |
Swipe points
1 | # swipe from point(x0, y0) to point(x1, y1) then to point(x2, y2) |
选择器
选择器是一种在当前窗口中识别特定 UI 对象的便捷机制, 很多时候仅按照坐标时点击并不精确,通用型不强。
选择器支持以下参数。有关详细信息,请参阅UiSelector Java 文档。
text
,textContains
,textMatches
,textStartsWith
className
,classNameMatches
description
,descriptionContains
,descriptionMatches
,descriptionStartsWith
checkable
,checked
,clickable
,longClickable
scrollable
,enabled
,focusable
,focused
,selected
packageName
,packageNameMatches
resourceId
,resourceIdMatches
index
,instance