ATX ATX-uiautomator2 使用 QPython 在 Android 手机内执行自动化

linpengcheng · 2018年02月11日 · 最后由 芋头不吃 回复于 2019年07月05日 · 12546 次阅读

根据帖子
在 Android 手机内执行 UI 自动化测试
动手实践了一把,把相关的操作步骤记录一下,由于 uiautomator2 版本的升级 ,需要依赖的库在原帖上增加了progressretry
手机上直接 push 电脑上的 uiautomator2 库,
uiautomator2 在手机上还需要安装依赖库为:
huamanizeprogressrequestsretry 四个

下面是具体的实践步骤

电脑端 uiautomator2 安装

1、安装 uiautomator2,执行命令
pip install --pre -U uiautomator2

2、设备安装 atx-agent
首先 Android 设备连接到 PC,并能够adb devices发现该设备,执行命令
python -m uiautomator2 init

最后提示 success,代表 atx-agent 初始化成功。

C:\Users\LiN>python -m uiautomator2 init
2018-02-11 20:15:21,139 - __main__.py:243 - INFO - Device(C4Y5T16810004018) init
ialing ...
2018-02-11 20:15:21,917 - __main__.py:110 - INFO - install minicap
2018-02-11 20:15:22,247 - __main__.py:117 - INFO - install minitouch
2018-02-11 20:15:22,976 - __main__.py:132 - INFO - apk(1.0.9) already installed,
 skip
2018-02-11 20:15:23,139 - __main__.py:164 - INFO - atx-agent(0.2.0) already inst
alled, skip
2018-02-11 20:15:23,140 - __main__.py:198 - INFO - launch atx-agent daemon
2018-02-11 20:15:25,371 - __main__.py:213 - INFO - atx-agent output: server star
ted, listening on 192.168.31.128:7912
2018-02-11 20:15:25,373 - __main__.py:214 - INFO - success

QPython 安装

QPython 是一个能让安卓手机运行和编写 Python 的 APP,Github 下载地址下载链接
下载qpython-release.apk,然后使用 adb install 安装即可。
安装好之后,由于 uiautomator2 的库依赖 huamanize、progress 和 requests,打开 QPython,点击QPYPI,然后点击INSTALL WITH PYTHON'S PYPI,分别执行:

pip install requests
pip install humanize
pip install progress

安装成功即可。

将相关的库及脚本文件 push 到手机内

在手机上运行编写的自动化脚本文件,需要用到 uiautomator2 库和相关的依赖库retry,由于INSTALL WITH PYTHON'S PYPI无法直接安装,所以直接将电脑上 uiautomator2 库的整个文件夹复制到制定的文件夹下就好了。
经过观察 QPython 中路径在这个下面:
/storage/emulated/0/qpython

将 uiautomator2 库复制到qpython/lib/python2.7/site-packages下,执行命令
adb push C:\Python35\Lib\site-packages\uiautomator2 /storage/emulated/0/qpython/lib/python2.7/site-packages

将 retry 库复制到qpython/lib/python2.7/site-packages下,执行命令
adb push C:\Python35\Lib\site-packages\retry /storage/emulated/0/qpython/lib/python2.7/site-packages

将写好的自动化脚本文件atx_agent_demo.py复制到qpython/scripts3下,执行命令
C:\Users\LiN>adb push D:\PycharmProjects\autotest\atx_agent_demo.py /storage/emulated/0/qpython/scripts3

手机端运行脚本

文件atx_agent_demo.py用网易云音乐来进行简单的 demo 演示

import uiautomator2 as ut2


def main():
    u = ut2.connect('http://0.0.0.0:7912')
    print(u.info)
    u.app_start('com.netease.cloudmusic')
    u(text='私人FM').click()
    u(description='转到上一层级').click()
    u(text='每日推荐').click()
    u(description='转到上一层级').click()
    u(text='歌单').click()
    u(description='转到上一层级').click()
    u(text='排行榜').click()
    u(description='转到上一层级').click()


if __name__ == '__main__':
    main()

打开 QPython,点击文件,然后点击dcripts找到atx_agent_demo.py,运行即可。附上运行的 GIF

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 16 条回复 时间 点赞

点赞

—— 来自 TesterHome 官方 安卓客户端

非常值得点赞

我之前一直想实现自动打开微信的方法,发现是主机 IP 没有配置好,要配置为 0.0.0.0

—— 来自 TesterHome 官方 安卓客户端

别的小米魅族手机运行都成功,就只有华为的荣耀手机这个奇葩,首先是包装不上,再者我从电脑拷贝包 OK 后,运行程序全是 Segmentation default,真的是服了!!请问楼主有遇到类似情况吗

dengehello #17 回复

没在很多手机上试过诶 只在一台华为 P9 上边实践了下 之后就没深入下去了

应该是 script 文件夹。script3 是个文件

为什么我 import uiautomator2 这一步就报错了啊,我已经把 PC 端的 uiautomator2、retry 都放到安卓的 site-packages 里面了啊!
然后,我看了日志,看到好像是 import requests 的问题,我把 PC 端的那些个包都给丢过去了,结果还是一样

莲蓬1 #14 回复

requests 不是 qpython 可以直接安装的吗 我记得好像会顺带装上其他的一些东西的 你用 qpython 安装 requests 试试看

python -m uiautomator2 init 这步会报错,装不了包 - 华为荣耀 9。求问!

[?25h2018-08-09 22:26:01,530 - main.py:143 - INFO - app-uiautomator.apk(1.1.0) installing ...
Traceback (most recent call last):
File "F:\Python2.7.15\lib\runpy.py", line 174, in run_module_as_main
"
main", fname, loader, pkg_name)
File "F:\Python2.7.15\lib\runpy.py", line 72, in _run_code
exec code in run_globals
File "F:\Python2.7.15\lib\site-packages\uiautomator2__main
.py", line 356, in
main()
File "F:\Python2.7.15\lib\site-packages\uiautomator2__main
.py", line 352, in main
fire.Fire(MyFire)
File "F:\Python2.7.15\lib\site-packages\fire\core.py", line 127, in Fire
component_trace = _Fire(component, args, context, name)
File "F:\Python2.7.15\lib\site-packages\fire\core.py", line 366, in _Fire
component, remaining_args)
File "F:\Python2.7.15\lib\site-packages\fire\core.py", line 542, in _CallCallable
result = fn(*varargs, **kwargs)
File "F:\Python2.7.15\lib\site-packages\uiautomator2__main
.py", line 273, in init
ignore_apk_check)
File "F:\Python2.7.15\lib\site-packages\uiautomator2__main
.py", line 291, in _init_with_serial
ins.install_uiautomator_apk(apk_version, reinstall)
File "F:\Python2.7.15\lib\site-packages\uiautomator2__main
.py", line 144, in install_uiautomator_apk
path = cache_download(app_url)
File "F:\Python2.7.15\lib\site-packages\uiautomator2__main
_.py", line 73, in cache_download
r = requests.get(url, stream=True)
File "F:\Python2.7.15\lib\site-packages\requests\api.py", line 72, in get
return request('get', url, params=params, **kwargs)
File "F:\Python2.7.15\lib\site-packages\requests\api.py", line 58, in request
return session.request(method=method, url=url, **kwargs)
File "F:\Python2.7.15\lib\site-packages\requests\sessions.py", line 512, in request
resp = self.send(prep, **send_kwargs)
File "F:\Python2.7.15\lib\site-packages\requests\sessions.py", line 644, in send
history = [resp for resp in gen] if allow_redirects else []
File "F:\Python2.7.15\lib\site-packages\requests\sessions.py", line 222, in resolve_redirects
**adapter_kwargs
File "F:\Python2.7.15\lib\site-packages\requests\sessions.py", line 622, in send
r = adapter.send(request, **kwargs)
File "F:\Python2.7.15\lib\site-packages\requests\adapters.py", line 513, in send
raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='github-production-release-asset-2e65be.s3.amazonaws.com', port=443): Max retries exceeded with url: /53296967/04557cd4-6a6f-11e8-8756-b86d54a7b2c7?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20180809%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20180809T142705Z&X-Amz-Expires=300&X-Amz-Signature=158a23651683c57e96afcd3f463272859a66e400c0bb63f473516c9dcaae2715&X-Amz-SignedHeaders=host&actor_id=0&response-content-disposition=attachment%3B%20filename%3Dapp-uiautomator.apk&response-content-type=application%2Fvnd.android.package-archive (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 10060] ',))

python -m uiautomator2 init --mirror 试试这个

dengehello #17 回复

使用荣耀 9 atx-agent 总是装不上,换 oppo 的就好了

ATX -uiautomator2 如何让脚本并行执行?谢谢

我的测试机是 oppo:
按照以上步骤执行出现了如下问题,请大佬帮忙指点:

oppo 貌似有的手机 init 之后 一拔掉数据线 u2 就 GG 了 你重新 init 之后 再试试

20楼 已删除

macos init 失败

你好 我也遇到这种情况.
华为 p20 8.1 系统,init 后拔出 USB,U2 就 GG 了. 只有一直插着 USB 才可以. 你有找到解决方法么?
我试过 5.1 6.X 7.X 系统的都没有这种问题.

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