pythonUIAutomator2使⽤超详细教程
⼀、环境要求
python 3.6+
android 4.4+
⼆、介绍
uiautomator2 是⼀个可以使⽤Python对Android设备进⾏UI⾃动化的库。其底层基于Google uiautomator,Google提供的uiautomator库可以获取屏幕上任意⼀个APP的任意⼀个控件属性,并对其进⾏任意操作。
四、安装
变量名的规范1、安装uiautomator2
1
2
pip install --pre uiautomator2
pip install pillow (如果需要截图,可安装这个库)
2、设备安装atx-agent
⾸先设备连接到PC,并能够adb devices发现该设备。
执⾏下⾯的命令会⾃动安装本库所需要的设备端程序:uiautomator-server,atx-agent,openstf / minicap,openstf / minitouch
1
2
3
4
5
6
7
8
# init就是所有USB连接电脑的⼿机上都安装uiautomator2
python -m uiautomator2 init
# 指定⼿机安装uiautomator2, ⽤ --mirror
python -m uiautomator2 init --mirror --serial $SERIAL
# 嫌弃慢的话,可以⽤国内的镜像
python -m uiautomator2 init --mirror
最后提⽰success,代表atx-agent初始化成功。
3、安装weditor
有了这个,⽅便我们快速的识别⼿机上的元素,⽅便写代码
1
pip install -U weditor
安装好之后,就可以在命令⾏运⾏ weditor --help 确认是否安装成功了。
Windows系统可以使⽤命令在桌⾯创建⼀个快捷⽅式:
1
nginx缓存配置weditor --shortcut
在windows cmd中执⾏上述命令后,会在桌⾯上创建⼀个快捷⽅式,如下图:
在这⾥插⼊图⽚描述
启动⽅法:
⽅法1.命令⾏直接输⼊ weditor 会⾃动打开浏览器,输⼊设备的ip或者序列号,点击Connect即可;
⽅法2.桌⾯上双击WEditor快捷⽅式即可;
⽅法3.命令⾏中执⾏ python -m weditor
启动后如下图:
在这⾥插⼊图⽚描述
五、应⽤及操作
调⽤uiautomator2的过程
配置⼿机设备参数,设置具体操作的是哪⼀台⼿机
抓取⼿机上应⽤的控件,制定对应的控件来进⾏操作
对抓取到的控件进⾏操作,⽐如点击、填写参数等。
设备连接⽅法,有两种:
python-uiautomator2连接⼿机的⽅式有两种,⼀种是通过WIFI,另外⼀种是通过USB。两种⽅法各有优缺点。
WIFI最便利的地⽅要数可以不⽤连接数据线,USB则可以⽤在PC和⼿机⽹络不在⼀个⽹段⽤不了的情况。
(1)通过WiFi,假设设备IP 192.168.0.107和您的PC在同⼀⽹络中
1
2
import uiautomator2 as u2
d = u2.connect('192.168.0.107')
(2)通过USB, 假设设备序列是123456789F
1
2
3
import uiautomator2 as u2
d = u2.connect('123456789F') # USB链接设备。或者u2.connect_usb('123456f')
#d = u2.connect_usb() 或者 d = u2.connect() ,当前只有⼀个设备时可以⽤这个
在没有参数的情况下调⽤u2.connect(), uiautomator2将从环境变量ANDROID_DEVICE_IP获取设备IP。如果这个环境变量是空的,uiautomator将返回connect_usb,您需要确保只有⼀个设备连接到计算机。
检查并维持设备端守护进程处于运⾏状态:
1
d.healthcheck()
打开调试开关:
1
2
d.debug = True
d.info
安装应⽤,只能从URL安装:
1
d.app_install('some-domain/som
e.apk') #引号内为下载apk地址
启动应⽤:
1
d.app_start('android.AlipayGphone') #引号内为包名称,这⾥为⽀付宝
停⽌应⽤:
5
#相当于'am force-stop'强制停⽌应⽤
d.app_stop('android.AlipayGphone')
#相当于'pm clear' 清空App数据
d.app_clear('android.AlipayGphone')
停⽌所有正在运⾏的应⽤程序:
1
2
3
4
5
# 停⽌所有
d.app_stop_all()
# 停⽌所有应⽤程序,除了amples.demo
d.app_stop_all(excludes=['amples.demo'])跳过弹窗,禁⽌弹窗:
1
2
d.disable_popups() # ⾃动跳过弹出窗⼝
d.disable_popups(False) # 禁⽤⾃动跳过弹出窗
获取设备信息:
5
6
7
8
9
10
11
12
13
python入门教程app14
15
16写代码做软件
17
18
19
# 获取基本信息
d.info
# 获取窗⼝⼤⼩
print(d.window_size())
# 设备垂直输出⽰例: (1080, 1920)
# 设备⽔平输出⽰例: (1920, 1080)
# 获取当前应⽤程序信息。对于某些android设备,输出可以为空print(d.current_app())
#获取设备序列号
print(d.serial)
#获取WIFI IP
print(d.wlan_ip)
#获取详细的设备信息
print(d.device_info)
获取应⽤信息:
5
6
7
8
9
10
11
12
13
14
15
d.app_info("android.AlipayGphone")
# 会输出
'''
{
"packageName": "android.AlipayGphone", "mainActivity": "android.AlipayGphone.AlipayLogin", "label": "⽀付寶",
"versionName": "10.2.13.9020",
"versionCode": 360,
"size": 108306104
memset函数功能
}
'''
# 保存应⽤程序图标
img = d.app_icon("android.AlipayGphone")
img.save("icon.png")
推拉⽂件:
(1)将⽂件推送到设备
1
2
3
4
5
6
7
8
9
# push⽂件夹
d.push("", "/sdcard/")
# push和重命名
d.push("", "/")
# push fileobj
with open("", 'rb') as f:
myeclipse和eclipse哪个好用d.push(f, "/sdcard/")
# 推动和更改⽂件访问模式
d.push("foo.sh", "/data/local/tmp/", mode=0o755)
(2)从设备中拉出⼀个⽂件
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论