相关文章:
https://github.com/openatx/uiautomator2 github 上的说明文档
开始配置 uiautomator2
pip install --pre -U uiautomator2
也可以是 pip install uiautomator2
安装完成之后,需要初始化手机端的服务。
python -m uiautomator2 init
这个是重点后面会经常用到, 初始化会自动从 github 上下载 6 个重要的文件安装到手机中。
其中包括 (minicap ,minicap.so ,minitouch,atx-agent,两个 APP(uiautomator.apk com.github.uiautomator.test.apk)
win10 下面会在 c 盘当前用户目录下生成 .uiautomator2 的缓存文件夹,这 6 个重要的东东都在里面,init 初始化的过程中有坑,新手会经常遇到各种问题各种报错,
原因不外乎:
1,手机驱动未安装
2,手机端 --- 设置 --- 开发者选项 -- 调试模式没打开
3,小米手机 MIUI 系统切记打开 ------- 开发者选项 ------- 允许模拟点击。
4,因为网络链接不正常导致这 6 大件没有完整安装好。
(init 的时候有个 BUG,com.github.uiautomator.test.apk 这个安装不成功也没缓存成功的时候,会判断 init Success)
5,端口占用问题,
5037 端口经常会被 PC 上的各种手机助手占用。解决方法参考:
https://blog.csdn.net/sinat_19917631/article/details/70228718
最直接就是不能用就重装。
重装之前
adb shell rm /data/local/tmp/minicap.so
adb shell rm /data/local/tmp/minitouch
adb shell rm /data/local/tmp/minicap
adb shell rm /data/local/tmp/atx-agent
卸载两个 APK
uiautomator.ap
com.github.uiautomator.test.apk
清空 PC 端的缓存
python -m uiautomator2 clear-cache
PC 端 pip uninstall uiautomator2
重新执行下面的命令,会重新安装重新缓存。
pip install —upgrade uiautomator2 # 更新
python -m uiautomator2 init
多试几遍,总能搞定,我搞定了 6 个手机了。
初始化完成后就可以跑简单 DEMO
脚本如下:
#!/usr/bin/python3
# -*- coding:utf-8 -*-
from time import sleep
from os import system
from subprocess import getoutput
import requests,pymysql,random
import uiautomator2 as u2
#上面导入了一堆包和模块,重要的是最后一句import uiautomator2 as u2
u2.DEBUG = True
d = u2.connect('http://192.168.0.105:7912')
d = u2.connect('6fcfc4311f484')
#上面两句任选一句,这是两种链接方式,一种是局域网IP,也就是WIFI链接, 另一个是通过ADB数据线链接, 设备号的获取是通过adb devices来手动取得。当然如果想通过局域网IP链接,必须先通过ADB链接成功才可以。
d.healthcheck()#这个很重要,每次执行脚本的时候运行这一句会检测设备端的准备工作是否到位。进程守护。
if d.info.get('screenOn')==False:#判断当前屏幕是否打开
d.screen_on()
sleep(2)#适当的加上延时,可以确保脚本的健壮,不容易崩溃
d.unlock()#这个解锁好像不是每个手机上都能用
sleep(1)
d.press('home')
sleep(1)
d(text='设置').click_exists()
#如果当前界面存在text值为'设置',就点击,如果不存在,脚本也不会报错,类似有 try: except : pass 功能
packagename = 'com.tencent.mm'
activity = 'com.tencent.mm.ui.LauncherUI'
d.app_start(packagename, activity=activity)
#上面是通过指定包名和类名来启动APP
还有好多种用法,新手务必完整阅读: https://github.com/openatx/uiautomator2
在 codeskyblue 老大未更新下一个版本之前,关于 long_click()
init.py 文件 1282 1289 行, 加上 duration
这样就可以指定长按时间,单位是 S
d(resourceId="com.tencent.mm:id/jh").right(resourceId="com.tencent.mm:id/jj").long_click(5)
最近一次更新,老大加入了 TOAST
d.make_toast("Hello world", 1.5) # 显示 1.5s toast
这个在实践中碰到 miui 系统无法显示,其他手机 OK
和这个项目配套的还有 weditor 这个东东,非常好用, 但是我在使用中也同样遇到不少问题, 链接经常奔溃,连上后 reload 不停的转圈圈。
但是这不能抹杀 weditor 高效找控件,辅助写脚本的功能。
本人小白,水平有限,望见谅。
感谢 codeskyblue 老大无私奉献,
感谢" 林鹏程 " 在学习过程中提供了很多帮助。