ATX python+atx+uiautomator2 (codeskyblue )--学习心得

xtt · 2018年03月21日 · 最后由 Elsie 回复于 2018年09月10日 · 2220 次阅读

相关文章:
https://github.com/openatx/uiautomator2 github 上的说明文档

https://testerhome.com/topics/11357 codeskyblue 老大写的使用说明

开始配置 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

这里插入因为 init 不成功,或者提示成功后却不能使用的解决方法。

最直接就是不能用就重装。
重装之前
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 后,只要没有重启手机或主动关闭相关进程,是不需要再次初始化的。

初始化完成后就可以跑简单 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)

像这样,可以给它一个 1~55 的随机数,这样可以让微信自动发不同时长的语音信息。

最近一次更新,老大加入了 TOAST
d.make_toast("Hello world", 1.5) # 显示 1.5s toast
这个在实践中碰到 miui 系统无法显示,其他手机 OK

和这个项目配套的还有 weditor 这个东东,非常好用, 但是我在使用中也同样遇到不少问题, 链接经常奔溃,连上后 reload 不停的转圈圈。
但是这不能抹杀 weditor 高效找控件,辅助写脚本的功能。

本人小白,水平有限,望见谅。
感谢 codeskyblue 老大无私奉献,
感谢" 林鹏程 " 在学习过程中提供了很多帮助。

共收到 3 条回复 时间 点赞

想要在指定的 控件上实现滑动 怎么操作呢?

3楼 已删除

Markdown 格式调整一下

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册