赞
踩
对于刚接触移动端UI自动化的小伙伴,大家应该都是从appium入手,但appium需要的环境比较麻烦,使用起来也相对来说比较麻烦(获取元素啥的还要借助adb的uiautomatorview2)。今天小编推荐一个超级好用的库,相较于appium,那简直是“懒人”福利~
uiautomator2是一个python库,用于Android的UI自动化测试,其底层基于Google uiautomator,Google提供的uiautomator库可以获取屏幕上任意一个APP的任意一个控件属性,并对其进行任意操作。
python-uiautomator2封装了谷歌自带的uiautomator2测试框架,提供便利的python接口。他允许测试人员直接在PC上编写Python的测试代码,操作手机应用,完成自动化,大大提高了自动化代码编写的效率。
如上图所示(用word画的蛮丑的):
运行原理主要分为两个部分
Python:运行脚本,并向移动端发送请求
移动端设备:移动设备上运行了封装了uiautomator2的http rpc服务,解析收到的请求,并调用原生uiautomator2的api实现在手机上的操作。
整个过程:
所以,由这张图我们就可以得知,要在设备上装东西啦!!!
了解uiautomator2的原理和介绍,接下来我们就开始实操了。
首先我们需要安装Android adb。小编也是去别的博主那里找的安装教程。
链接双手奉上:超简单的adb安装~
大家参考原文博主的方法一就可以啦!
- # 运用终端pip安装
- pip install --upgrade --pre uiautomator2
安装ATX的前提是设备要连接上PC端,并且能够用adb devices获取到设备号。
- # init就是所有USB连接电脑的设备上都安装uiautomator2
- python -m uiautomator2 init
-
- # 指定设备安装uiautomator2, 用 --mirror
- python -m uiautomator2 init --mirror --serial $SERIAL
-
- # 嫌弃慢的话,可以用国内的镜像
- python -m uiautomator2 init --mirror
最后会提示success,代表ATX初始化完成。
成功之后,我们就可以看到在我们的设备上,有一个小车车的图标出现啦,这就是atx-agent。
pip install --pre -upgrade weditor
安装完成后,接下来就是启动,启动方法:
python -m weditor
启动后,会直接在本地打开一个网页,接下来的操作都可以只在这个网页完成。
比起appium,这个功能不要太强大了~~
1. 通过USB连接
- # 通过USB连接后,输入adb获取设备序列号的命令
- adb devices
- # 获取到设备号后(假设设备号为aaa),在控制台输下命令连接
- import uiautomator2 as u2
- d = u2.connect('aa') # USB链接设备。或者u2.connect_usb('123456f')
- #d = u2.connect_usb() # 当前只有一个设备时可以用这个
2. 通过wifi连接
- # 假设设备aaa与PC正处于同一局域网下
- import uiautomator2 as u2
- d = u2.connect('aaa') # WIFI链接设备。或者u2.connect_wifi('aaa')
d.healthcheck()
- # 引号内为下载apk地址
- d.app_install('http://aaaa.com/aaa.apk')
我们也可以自己手动安装后,用命令获取包名
- # aaa为测试应用的包名,注意哦不是活动包名
- d.start('aaa')
- #强制停止应用
- d.app_stop('aaa')
- #清空App数据
- d.app_clear('aaa')
- # 停止所有
- d.app_stop_all()
- # 停止所有应用程序,除了aaa
- d.app_stop_all(excludes=['aaa'])
- # 自动跳过弹出窗口
- d.disable_popups()
d.click(x,y)
- d.double_click(x,y)
- #加多一个时间参数,默认两个单击之间间隔时间为0.5秒
- d.double_click(X,Y,0.5)
- d.long_click(x,y)
- #长按0.1秒
- d.long_click(X,Y,0.1)
- d.swipe(sx, sy, ex, ey)
- # 默认两个坐标滑动轨迹在0.5s完成
- d.swipe(sx, sy, ex, ey, 0.5)
- d.drag(sx, sy, ex, ey)
- # 拖动0.5s
- d.drag(sx, sy, ex, ey, 0.5)
到时候小编会专门出一篇九宫格教程,有兴趣的小伙伴们移步~
- # 从点(x0, y0)滑到点(x1, y1)再滑到点(x2, y2)
- # 两点之间的滑动速度是0.2秒
- d.swipe((x0, y0), (x1, y1), (x2, y2), 0.2)
ps:单击,滑动,拖动操作支持百分比位置值。例:
- # 表示长按屏幕中心
- d.long_click(0.5, 0.5)
- # 推送aaa这个文件到sdcard下
- d.push("aaa.txt", "/sdcard/")
- # 推送aaa这个文件到sdcard下和对这个文件进行重命名
- d.push("aaa.txt", "/sdcard/bar.txt")
- # fileobj
- with open("aaa.txt", 'rb') as a:
- d.push(a, "/sdcard/")
- # 推动和更改文件访问模式
- d.push("aaa.sh", "/data/local/tmp/", mode=0o755)
- # 拉取下一个叫aaa的文件
- d.pull("/sdcard/aaa.txt", "aaa.txt")
-
- # 如果在设备上找不到文件,FileNotFoundError将引发
- d.pull("/sdcard/abcd_error.txt", "aaa.txt")
- # 打开屏幕
- d.screen_on()
- # 关闭屏幕
- d.screen_off()
-
- d.press("home") # 点击home键,在视图中也可以直接按按钮触发
- d.press("back") # 点击back键,在视图中也可以直接按按钮触发
- d.press("left") # 点击左键
- d.press("right") # 点击右键
- d.press("up") # 点击上键
- d.press("down") # 点击下键
- d.press("center") # 点击选中
- d.press("menu") # 点击menu按键
- d.press("search") # 点击搜索按键
- d.press("enter") # 点击enter键
- d.press("delete") # 点击删除按键
- d.press("recent") # 点击近期活动按键
- d.press("volume_up") # 音量+
- d.press("volume_down") # 音量-
- d.press("volume_mute") # 静音
- d.press("camera") # 相机
- d.press("power") #电源键
- d.unlock()
- # 原理相当于:
- # 1. 发射活动
- # 2. 按home键
正在陆续补充中....
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。