介绍
Android UI自动化测试框架,提供了屏幕模拟点击的方法如点击、长按、输入、滑动等;
uiautomator2与uiautomator:
uiautomator2 的底层是基于uiautomator,uiautomator可以获取屏幕上任意一个APP的任意一个控件属性,并对其进行任意操作,但有两个缺点:
- 只能使用Java语言;
- 输出为jar包,需要上传到设备上运行。
2.0使用python语言,输出为APK,可以使用安卓服务和接口,开发和调试比1.0简单。
配置环境
- 安装python:https://www.runoob.com/python/python-install.html
- adb:android debug bridge,安卓手机的调试工具
安装参考: https://adbshell.com/downloads - 安装uiautomator2:pip安装:
pip3 install --pre -U uiautomator2
- weditor:比android sdk自带的UIAutomatorView工具更好用的元素定位工具,基于uiautomator2。
安装命令:pip3 install --pre weditor
uiautomator2常用api
设备连接:
- d = u2.connect_usb(serial);
- d = u2.connect(ip)
应用控制:
- 安装 d.app_install(‘apkurl’);
- 打开 d.app_start(‘com.tencent.mm‘)等
元素控制:
- 单击坐标:d.click(x,y)
- xpath单击:d.xpath().click()
- resourceid单击:d(resourceid = “xxx”).click()
- 双击:d.double_click()
- 输入文本:d.send_keys(“ 122”, clear=True)
操作步骤
adb连接手机
两种连接方式:
-
使用usb:
连接步骤: 1. 手机打开开发者模式,允许usb调试(每种型号手机打开方式不一样,小米:连续点击版本号可以打开开发者模式,具体可以百度) 2. usb连接电脑和手机 3. 手机允许调试 4. 执行adb devices命令查看连接设备 5. 断开连接:断开usb
-
无线连接:
连接步骤: 1. 先用usb连接,保证手机和电脑在同一网段下 2. 执行adb devices命令查看连接设备序列号 3. 给设备指定一个端口号:adb –s [手机序列号] tcpip [端口号] 4. 连接手机IP:adb connect [手机IP]:[端口号] 5. 断开连接:adb disconnect [手机IP]:[端口号]
华为手机也可以无线连接:
调整设备上开启usb调试的顺序:
序列号
启动uiautomator2,安装atx-agent
Atx-agent:运行在手机后台的插件,获取ip地址,可通过手机版本号,调用不同的命令
启动命令:python3 -m uiautomator2 init
执行后手机上会提示下载atx-agent,点击下载(uiautomator2不稳定,需要atx-agent保活)
启动weditor
启动weditor命令:python3 -m weditor
启动后命令行窗口不要关,会在浏览器打开weditor窗口
- 系统选择:ios暂不使用;
- 输入ip或手机序列号,点击connect连接,出现绿色小树表示连接成功;
- 点击dump hierarchy 刷新,同步手机页面,选择实时,可以自动同步手机页面状态;
- 点击页面元素,可以生成xpath代码,也可以使用坐标或其他定位方式;
- 下面分别是开关机,主页面,返回,点击如手机操作;
- 在线调试代码,点击页面生成代码,加进逻辑后,可以在线执行,查看执行效果,进行修改,可以直接复制进idea里使用;
微信发消息demo
python-demo:搜索群名后进群发文本消息(因为没有判断页面元素是否存在的逻辑,初始页面需停留在聊天页)
wechat_dict = d.app_info('com.tencent.mm')#获取微信应用信息
version = wechat_dict['versionName']#获取版本号
if version =='7.0.22':
d.xpath('//*[@resource-id="com.tencent.mm:id/f8y"]').click()#搜索按钮
d.xpath('//*[@resource-id="com.tencent.mm:id/dn7"]/android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/android.widget.RelativeLayout[1]').click()#搜索输入框
d.send_keys("测试编外群", clear=True)#输入群名
time.sleep(2)
d.xpath('//*[@resource-id="com.tencent.mm:id/gbv"]').click()#点击第一个群
# d.send_keys("测试编外群", clear=True)
time.sleep(2)
d.xpath('//*[@resource-id="com.tencent.mm:id/g78"]').click()#聊天页面输入框
d.set_fastinput_ime(True)
d.send_keys("橙子好吃d", clear=True)#输入消息
# d.send_keys("橙子好吃", clear=True)
d.xpath('//*[@resource-id="com.tencent.mm:id/anv"]').click()#点击发送