介绍
uiautomator2 是一个Android UI自动化框架,底层基于Google uiautomator,支持Python编写测试脚本对设备进行自动化,大大提高了自动化代码编写的效率。
环境配置
安装adb
谷歌官网下载Android Platform Tools 点击下载,解压,并将adb.exe所在的目录加入到系统的PATH中
直接打开命令行输入:adb 如下图说明安装成功
安装python-uiautomator2
首先创建一个虚拟环境(确保已经安装过virtualenv)
virtualenv uiautomator
激活虚拟环境,进入到Scripts(Windows)目录下运行
activate
安装python-uiautomator2
pip install --pre -U uiautomator2
初始化设备
首先设备连接到PC,并能够adb devices发现该设备,然后运行
python -m uiautomator2 init
应用自动化
- 连接设备
- 定位元素工具
- 定位方式
- 编写脚本
连接设备
python-uiautomator2连接手机的方式有两种,一种是通过WIFI,另外一种是通过USB。两种方法各有优缺点。
WIFI最便利的地方要数可以不用连接数据线,个人感觉USB更稳定一点
- WiFi连接(手机获取到手机的IP,并确保电脑可以PING通手机。手机的IP可以在设置-WIFI设置里面获取到。
比如手机的IP是172.16.152.15)(PS:由于本人用的连接夜神模拟器,所以用WiFi连接不了,只能使用设备名连接)import uiautomator2 as u2 d = u2.connect_wifi('172.16.152.15')
- USB连接(devices 名可以通过adb devices获取到,假设序列号是127.0.0.1:62001)
import uiautomator2 as u2 d = u2.connect_usb('127.0.0.1:62001')
- 直接连接,会自动分辨是WiFi还是USB
import uiautomator2 as u2 #d = u2.connect('127.0.0.1:62001') d = u2.connect('172.16.152.15')
定位元素工具
查找元素属性可以通过三种方式,一是通过Android SDK内置工具uiautomatorviewer.bat 获取,比较方便,但是运行uiautomator2的时候,uiautomatorviewer.bat运行不起来,两者之间冲突太严重;二是利用appium来查找,不过这个环境安装比较复杂(PS:利用appium时也需要把ATXagent停掉,不然连接不上appium);三是利用weditor。
安装weditor: pip install --pre weditor
安装完成后运行:python -m weditor
,会启动一个网页 http://localhost:17310/(可能我的模拟器不兼容,显示黑屏,但是元素还是可以获取到)
weditor图
appium图
定位方式
Selector是一种在当前窗口中标识特定UI对象的便捷机制
# 选择文本为'Enter your Full Name',className为'android.widget.EditText',当元素不唯一时,可选择多个属性,逗号分隔
d(text="Enter your Full Name", className="android.widget.EditText").send_keys("test")
- text,textContains,textMatches,textStartsWith className,
- classNameMatches
- description,descriptionContains,descriptionMatches,descriptionStartsWith
- checkable,checked,clickable,longClickable
- scrollable,enabled,focusable,focused,selected packageName,
- packageNameMatches resourceId, resourceIdMatches
其他定位参考:https://github.com/openatx/uiautomator2#selector](https://github.com/openatx/uiautomator2#selector)
编写脚本
一个登陆脚本
import time
import uiautomator2 as u2
d = u2.connect('127.0.0.1:62001')
# print d.adb_shell("dumpsys window | grep mCurrentFocus") # 获取当前窗体的信息
# packageName = "io.testproject.demo"
d.app_start("io.testproject.demo") # 启动APP
d(resourceId="io.testproject.demo:id/name").clear_text()
# 输入框输入信息的两种操作:send_keys和set_text
# d(text="Enter your Full Name").send_keys("test")
# d(resourceId="io.testproject.demo:id/name").send_keys("test")
d(resourceId="io.testproject.demo:id/name").set_text("test")
# d(resourceId="io.testproject.demo:id/password").clear_text()
d(resourceId="io.testproject.demo:id/password").send_keys("12345")
d(textContains="Login").click()
time.sleep(3)
d.app_stop("io.testproject.demo")
图示
参考:
https://github.com/openatx/uiautomator2#selector
https://blog.csdn.net/ricky_yangrui/article/details/81415365