ATX 浅谈自动化测试工具 python-uiautomator2

codeskyblue · 2017年12月24日 · 最后由 groovy2016 回复于 2023年10月06日 · 49418 次阅读
本帖已被设为精华帖!

前言

首先是看了这篇文章浅谈自动化测试工具 发现文章写的结构很合理,理解起来也很容易。本着学习的心态,模仿其结构再写一篇😀

简单介绍

python-uiautomator2 是一个自动化测试开源工具,仅支持 Android 平台的原生应用测试。

支持平台及语言

python-uiautomator2 封装了谷歌自带的 uiautomator2 测试框架,提供便利的 python 接口。他允许测试人员直接在 PC 上编写 Python 的测试代码,操作手机应用,完成自动化,大大提高了自动化代码编写的效率。

工作原理

以下图片使用 Windows 画图软件

如图所示,python-uiautomator2 主要分为两个部分,python 客户端,移动设备

  • python 端: 运行脚本,并向移动设备发送 HTTP 请求
  • 移动设备:移动设备上运行了封装了 uiautomator2 的 HTTP 服务,解析收到的请求,并转化成 uiautomator2 的代码。

整个过程

  1. 在移动设备上安装atx-agent(守护进程), 随后atx-agent启动 uiautomator2 服务 (默认 7912 端口) 进行监听
  2. 在 PC 上编写测试脚本并执行(相当于发送 HTTP 请求到移动设备的 server 端)
  3. 移动设备通过 WIFI 或 USB 接收到 PC 上发来的 HTTP 请求,执行制定的操作

安装工具

  • Python2 或者 Python3 均可。(也可以尝试使用 Android 上 Python 客户端:QPython)
  • 移动设备

环境搭建

安装 adb

如命令行可以执行adb devices,则跳过此步骤
从谷歌官网下载 Android Platform Tools https://developer.android.com/studio/releases/platform-tools.html,解压,并加包含adb.exe的目录加入到系统的 PATH 中。

安装 python-uiautomator2

pip install --pre -U uiautomator2

设备安装 atx-agent

首先设备连接到 PC,并能够adb devices发现该设备。

# 从github下载atx-agent文件,并推送到手机。在手机上安装包名为`com.github.uiautomator`的apk
$ python -m uiautomator2 init
success

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

应用及操作

调用 uiautomator2 的过程

  1. 配置手机设备参数,设置具体操作的是哪一台手机
  2. 抓取手机上应用的控件,制定对应的控件来进行操作
  3. 对抓取到的控件进行操作,比如点击、填写参数等。

配置手机设备参数

python-uiautomator2 连接手机的方式有两种,一种是通过 WIFI,另外一种是通过 USB。两种方法各有优缺点。
WIFI 最便利的地方要数可以不用连接数据线,USB 则可以用在 PC 和手机网络不在一个网段用不了的情况。

  1. 使用 WIFI 连接

    手机获取到手机的 IP,并确保电脑可以 PING 通手机。手机的 IP 可以在设置-WIFI 设置里面获取到。
    比如手机的 IP 是192.168.0.100,连接设备的代码为

    import uiautomator2 as u2
    d = u2.connect('192.168.0.100')
    
  2. 使用 USB 连接

    手机的序列号可以通过adb devices获取到,假设序列号是123456f,连接代码为

    import uiautomator2 as u2
    d = u2.connect_usb('123456f')
    

抓取手机上应用的控件

虽然很想用 Android SDK 内置工具uiautomatorviewer.bat,但是运行 uiautomator2 的时候,uiautomatorviewer.bat运行不起来,两者之间冲突太严重。
于是参考着uiautomatorviewer的界面,我又写了一个weditor,调用 python-uiautomator2 的两个接口screenshotdump_hierarchy这样就不会有冲突问题了

注:weditor 依然处于开发期,功能可能会跟文中描述的有所不同

安装方法: pip install --pre weditor

使用方法:
首先运行python -m weditor,之后浏览器会自动打开一个网页 http://atx.open.netease.com(注:这个网址仅提供一个前端,而python -mweditor这个命令则本地开放了 HTTP 的接口,前端去跟本地的服务去通信)

下图为网页的截图

重点说下这个部分

先忽略iOSNeco这两个,直接选择 Android。输入框中可以写设备的 IP 或者设备的 Serial(序列号),跟上面提到的配置手机设备参数用法一致。之后点击 Connect,如果一切正常就会出现一个绿色的叶子。

页面刷新时,点击蓝色的 Reload 按钮重新刷新。

定位方式

  1. ResourceId 定位: d(resourceId="com.smartisanos.clock:id/text_stopwatch").click()
  2. Text 定位 d(text="秒表").click()
  3. Description 定位 d(description="..").click()
  4. ClassName 定位 d(className="android.widget.TextView").click()

xpath 定位并不支持,一开始打算做支持的,但是发现不用也能搞定。就是代码写的长一点而已。

操作控件

# click
d(text="Settings").click()

# long click
d(text="Settings").long_click()

# 等待元素的出现
d(text="Settings").wait(timeout=10.0)

九宫格解锁:以前文章写过 https://testerhome.com/topics/11034

中文字符的输入
如果可以定位到元素,直接通过 set_text 就可以输入中文

d(text="Settings").set_text("你好")

如果定位不到元素需要使用send_keys方法,以及切换输入法

d.set_fastinput_ime(True)
d.send_keys("你好 Hello")
d.set_fastinput_ime(False) # 输入法用完关掉

截图:d.screenshot("home.jpg")
获取图层信息:xml = d.dump_hierarchy()

还有太多太多的操作,我就不写了。更多更详细的 API 接口文档,直接去 Github 上看文档吧, 记得留下你的 Star

https://github.com/openatx/uiautomator2

搞定收工

_^

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

火钳 占楼

威武

不支持 xpath 的话 有的 app 是不是不好找控件呢?就楼主说的这 4 个元素,还是不能满足需求的样子

我去催饭 回复

查询条件还有很多,后面我留了一个链接

我去催饭 回复

不支持 xpath 可以支持 text textContains

这么多方法,总有一款适合你

仅楼主可见
原生 回复

你可以把报错信息打出来,我这还没见过 AndroidO 的设备

匿名 #7 · 2017年12月26日

支持移动端 webview 吗

webview 用 selenium 就好了

还有太多太多的操作,我就不写了。看Github上的文档吧,绝对比我现在写的要好和全
这个我不是十分赞同。

github 上就没介绍 weditor……

思寒_seveniruby 将本帖设为了精华贴 12月26日 22:55
huj 回复

没 init

不错,之前看着 uiautomator2 仅支持 java,我的头就大了。因为写着 Java 效率太低。

老马 ubuntu16.04 ATX 使用记录 中提及了此贴 01月25日 17:23
141楼 已删除

执行 python -m weditor 时会报错,求助!!

C:\Users\Administrator>python -m weditor
listen port 17310
[I 180205 11:22:46 web:2087] 304 GET /api/v1/version (::1) 1.00ms
SN -
[E 180205 11:22:56 web:1614] Uncaught exception GET /api/v1/devices/-/screenshot
(::1)
HTTPServerRequest(protocol='http', host='localhost:17310', method='GET', uri
='/api/v1/devices/-/screenshot', version='HTTP/1.1', remote_ip='::1')
Traceback (most recent call last):
File "C:\Python27\lib\site-packages\tornado\web.py", line 1534, in execut
e
result = method(*self.path_args, **self.path_kwargs)
File "C:\Python27\lib\site-packages\weditor__main
_.py", line 134, in get

d.screenshot().convert("RGB").save(buffer, format='JPEG')
AttributeError: 'NoneType' object has no attribute 'screenshot'

蔡瑞淳 回复

找到原因了,我忘了 connect 手机😂

HTTPConnectionPool(host='10.155.238.243', port=7912): Read timed out. (read timeout=10)
链接超时,为啥捏


请问楼主 ImportError: No module named cv2 是怎么回事啊?

miaohaidong 回复

小 bug,多谢反馈,已经修复 . pip install --pre -U weditor 重新试试

codeskyblue 回复


能够弹出网页了,但是依旧提示 Local server not started

之前有同事无意卸载了手机里面的 uiautomator.apk,最后查看了你的代码实现才发现必须要通过 python -m uiautomator2 init 重新安装才行。
这块还是注明一下吧。
另外,你报错还是要友好点,希望能把这些问题比如 http 端口没有正常映射以及发送 http 请求时候的错误做一些简单的封装。
总体来说,很好的 weditor

陈雷 回复

多谢反馈,会渐渐完善的

多设备并行执行的时候不如 appium 稳定。经常出现服务断开的现象、

chunyong 回复

单个设备很稳定?

请问支持 android 7.1.1 系统的设备吗,例如 vivo X20,我总是连接失败
Traceback (most recent call last):
File "C:\Python\Python35\lib\site-packages\weditor_main.py", line 297, in post
ret = eval(code, {'d': d})
File "", line 1, in
File "C:\Python\Python35\lib\site-packages\uiautomator2__init
.py", line 1218, in inner
return fn(self, *args, **kwargs)
File "C:\Python\Python35\lib\site-packages\uiautomator2__init
.py", line 1261, in click
self.session.click(x, y)
File "C:\Python\Python35\lib\site-packages\uiautomator2__init
.py", line 996, in click
ret = self.jsonrpc.click(x, y)
File "C:\Python\Python35\lib\site-packages\uiautomator2__init
.py", line 322, in __call_
return self.server.jsonrpc_retry_call(jsonrpc_url, self.method, params, http_timeout)
File "C:\Python\Python35\lib\site-packages\uiautomator2_init.py", line 329, in jsonrpc_retry_call
return self.jsonrpc_call(*args, **kwargs)
File "C:\Python\Python35\lib\site-packages\uiautomator2__init
_.py", line 373, in jsonrpc_call
raise err
uiautomator2.JsonRpcError: -32001 Server error: java.lang.SecurityException
[Finished in 1.259s]

话说,我如果想用 uiautomator2 把本地硬盘里的 APK 装到手机上,应该怎么做呢?

蔡瑞淳 uiautomator2 知识点滴记录 中提及了此贴 03月23日 12:03
xtt python+atx+uiautomator2 (codeskyblue )--学习心得 中提及了此贴 03月24日 11:02
xtt python+atx+uiautomator2 (codeskyblue )--学习心得 中提及了此贴 03月24日 11:02
linpengcheng ATX-uiautomator2 实现 webview 的操作 中提及了此贴 03月29日 21:08

请问下楼主,atx-agent 经常返回 502 是怎么回事?

零飞飞 回复

uiautomator 这个 Apk 可能经常退出,不行就提个 issue

我使用 stf 机器执行 uia2 init 的时候会报一个错误,这是怎么回事儿呢?

xiaqing 回复

网络错误,github 被强了吧

codeskyblue 回复

我直接用源码调试就可以顺利执行,命令行就不行。

1、不能使用 stf 的设备远程连接使用 weditor 吗?

[W 180411 17:48:06 web:2063] 430 GET /api/v1/devices/1739cdba-b03c-4ee5-8966-423a0ad3944d/screenshot (::1) 24.20ms
SN 1739cdba-b03c-4ee5-8966-423a0ad3944d
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/site-packages/weditor/__main__.py", line 134, in get
    d.screenshot().convert("RGB").save(buffer, format='JPEG')
  File "/usr/local/lib/python2.7/site-packages/uiautomator2/__init__.py", line 748, in screenshot
    r = requests.get(self.server.screenshot_uri)
  File "/usr/local/lib/python2.7/site-packages/requests/api.py", line 72, in get
    return request('get', url, params=params, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/requests/api.py", line 58, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/requests/sessions.py", line 502, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/lib/python2.7/site-packages/requests/sessions.py", line 612, in send
    r = adapter.send(request, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/requests/adapters.py", line 490, in send
    raise ConnectionError(err, request=request)
ConnectionError: ('Connection aborted.', BadStatusLine("''",))
xiaqing 回复

应该跟 stf 不冲突的,你这个问题好像是因为 init 的失败的问题

我的 andriod 连接成功后,显示手机屏幕的窗口很小,而且没法拖动窗口,请问这个是兼容
性问题,还是配置问题?

RuntimeWarning: uiautomator2 is down, restart
如何重启?

CC 回复

这个意思是自己正在重启中,不用管

XG2 回复

换成 chrome 就没事了

请问,我安装好了。uiautomator2。再去执行 python -m uiautomator2 init 这条语句报以下错误是什么原因:
raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='github-production
-release-asset-2e65be.s3.amazonaws.com', port=443): Max retries exceeded with ur
l: /53296967/aaffc180-23bf-11e8-8860-55319ef04337?X-Amz-Algorithm=AWS4-HMAC-SHA2
56&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20180420%2Fus-east-1%2Fs3%2Faws4_requ
est&X-Amz-Date=20180420T064358Z&X-Amz-Expires=300&X-Amz-Signature=302e0be75f8b2c
40cc3da27d748ee8636659a1c532038d5e82925f3ac9e2a655&X-Amz-SignedHeaders=host&acto
r_id=0&response-content-disposition=attachment%3B%20filename%3Dapp-uiautomator.a
pk&response-content-type=application%2Fvnd.android.package-archive (Caused by Ne
wConnectionError(' 0003F1E5F8>: Failed to establish a new connection: [Errno 10060] ',))

CC JAVA 版 ATX-Client 中提及了此贴 04月24日 19:12


楼主,发现一个 bug,win10 系统,连接手机成功,但是界面不显示,不过可以进行点击操作,代码也显示

Whsnd 回复

手机型号也说下

codeskyblue 回复

三星 s8 安卓版本 8.0

codeskyblue 回复


vivo 安卓版本 4.4 也不显示界面

codeskyblue 回复


界面 430

本人弄了一台 PC A,连接手机,然后再从另外一台 PC B 通过 SSH 登录到 PC A 上,然后运行” python -m uiautomator2 init”,就会提示连接超时,log 如下。但是我如果直接在 PC A 上运行就可以正常的初始化成功。麻烦楼主帮忙看看问题

[root@e2e ~]# python -m uiautomator2 init
2018-05-22 17:55:30,921 - main.py:269 - INFO - Detect pluged devices: [u'c3718c7c']
2018-05-22 17:55:30,921 - main.py:286 - INFO - Device(c3718c7c) initialing ...
2018-05-22 17:55:31,214 - main.py:113 - INFO - install minicap
2018-05-22 17:55:31,385 - main.py:120 - INFO - install minitouch
2018-05-22 17:55:31,626 - main.py:137 - INFO - apk(1.0.12) already installed, skip
2018-05-22 17:55:31,679 - main.py:175 - INFO - atx-agent(0.2.1) already installed, skip
2018-05-22 17:55:31,842 - main.py:212 - INFO - launch atx-agent daemon
Traceback (most recent call last):
File "/usr/lib64/python2.7/runpy.py", line 162, in run_module_as_main
"
main", fname, loader, pkg_name)
File "/usr/lib64/python2.7/runpy.py", line 72, in _run_code
exec code in run_globals
File "/usr/lib/python2.7/site-packages/uiautomator2/
main.py", line 348, in
main()
File "/usr/lib/python2.7/site-packages/uiautomator2/
main.py", line 344, in main
fire.Fire(MyFire)
File "/usr/lib/python2.7/site-packages/fire/core.py", line 127, in Fire
component_trace = _Fire(component, args, context, name)
File "/usr/lib/python2.7/site-packages/fire/core.py", line 366, in _Fire
component, remaining_args)
File "/usr/lib/python2.7/site-packages/fire/core.py", line 542, in _CallCallable
result = fn(*varargs, **kwargs)
File "/usr/lib/python2.7/site-packages/uiautomator2/
main.py", line 273, in init
ignore_apk_check)
File "/usr/lib/python2.7/site-packages/uiautomator2/
main.py", line 295, in _init_with_serial
ins.launch_and_check()
File "/usr/lib/python2.7/site-packages/uiautomator2/
main_.py", line 225, in launch_and_check
'http://localhost:%d/version' % lport, timeout=3)
File "/usr/lib/python2.7/site-packages/requests/api.py", line 72, in get
return request('get', url, params=params, **kwargs)
File "/usr/lib/python2.7/site-packages/requests/api.py", line 58, in request
return session.request(method=method, url=url, **kwargs)
File "/usr/lib/python2.7/site-packages/requests/sessions.py", line 508, in request
resp = self.send(prep, **send_kwargs)
File "/usr/lib/python2.7/site-packages/requests/sessions.py", line 618, in send
r = adapter.send(request, **kwargs)
File "/usr/lib/python2.7/site-packages/requests/adapters.py", line 521, in send
raise ReadTimeout(e, request=request)
requests.exceptions.ReadTimeout: HTTPConnectionPool(host='localhost', port=52630): Read timed out. (read timeout=3)

@codeskyblue 每次连接都不行,是网络超时导致的还是连接的问题?


连接不是是为什么,网络正常、安卓上也装了对应服务,楼主求解答

linpengcheng 基于 ATX-Server 的 UI 自动化测试框架 中提及了此贴 06月18日 22:20
异彩飞天 回复

uiautomator2 定位元素,怎么实现啊,d 是 java 语言吧

python-uiautomator2,请问下楼主,python 语言写脚本的花,用 uiautomator2 捕捉到元素后,怎么用 python 语言现实啊,d(className="android.view.View", instance=44) 这个是 java 语言现实的吧 😱

arsenalley 回复

后端是 java 的 uiautomator2,这个是 python 做的封装

codeskyblue 回复

具体步骤是如何实现的,可以告诉我这个菜鸟吗 ?😱

为啥有的控件找起来非常非常慢,用 resourceId 定位的,要等好几分钟才有返回,有时又找不到,都是同一个界面

判断子选择器存在不存在是不能用用 exists 么,
如果不存在不会返回 false,是报错了

使用 USB 连接

手机的序列号可以通过 adb devices 获取到,假设序列号是 123456f,连接代码为

import uiautomator2 as u2
d = u2.connect_usb('123456f') 这段连接代码 在什么地方写啊

墨语 回复

在代码编辑器里面写 :)

codeskyblue 回复

我有个疑问,就是我用 python 开发工具 p cha r m 进行开发导入 uiautomator 总是无法导入,提示没有模块

codeskyblue 回复

请问,现在支持多台设备同时执行脚本吗?
哪里有 sample 可以看?

匿名 #64 · 2018年09月07日
lina 回复

我也碰到这个问题,很奇怪,不知道你的解决了么?

这个提示我就很迷茫, 我不是用了 python -m weditor 吗

还有一点, 我昨天也是, 但是不知道怎么就好了..

我输入 python -m weditor 后并没有自动打开一个网页 http://atx.open.netease.com,出现了如下图:

有没有大佬知道什么原因啊

143楼 已删除
陈立志 回复

现在改成本地的了,就是这个网页,没错的

仅楼主可见

我在进行到

就卡住了,提示如下 error

用的是安卓 sdk 的虚拟机,版本是 4.4

发现使用 Android 9 手机调试,解锁状态下无法运行测试脚本,总是在初始化的时候报错。
运行到 u = u2.connect_usb(‘HM8LDA8LRCDA8SEA’),或者 u.healthcheck() 这句就会卡住。reset_uiautomator() 时提示 "Uiautomator started failed. Find solutions in https://github.com/openatx/uiautomator2/wiki/Common-issues",在该网页没能找到解决的方法。
但手动熄屏之后运行脚本,可以跑起来。所以每次都是跑起来再给机器解锁,使用 Android8.1 不会有这种现象。
请问有大佬知道怎么解决吗?

wujiajing 回复

问题不清楚,但是解决方法是有的,你可以使用 adb 判断当前是否是亮屏状态,然后再发送电源键给手机就好了

使用 weditor 可以连接,显示界面,点击响应。 但是没有元素抓取, 只有屏幕坐标, 好痛苦, 是那里不对呢?

系统信息
PC: win10 64 位, anaconda+py3.5
安装的 uiautomator2 (pip install --pre uiautomator2)
安装的 weditor (pip install --pre weditor)

手机:华为 荣耀 7, android 6.0

现在都是重启手机后直接运行 weditor, 就这样。 用 uiautomatorviewer 可以获得元素内容!
也重新执行过 python -m uiautomator2 init 这句, 问题依旧。

仅楼主可见
Montion912 回复

升级

codeskyblue 回复

拜托大佬能不能说的详细点,升级什么?怎么升级?万分感谢

Montion912 回复
pip install -U --pre uiautomator2
python -m uiautomator2 init
仅楼主可见
codeskyblue 回复

大佬我弄好了 谢谢你的解答 感谢

sudo python -m uiautomator2 init 只后报错 EnvironmentError: package com.github.uiautomator not installed


请问一下大家 这个问题是怎么回事。使用电脑连接安卓模拟器,adb 的连接什么的都没问题,可是在执行了 python -m weditor 之后就一直这样。

之前手机安装还好好的,今天两台荣耀手机使用 python -m uiautomator2 init --mirror 全报 502 的错误了,uiautomator2 是 0.1.7 的版本

simple 专栏文章:[精华帖] 社区历年精华帖分类归总 中提及了此贴 12月13日 14:44

请教一个问题,当 id 和 classname 都不唯一的时候,这个控件的位置需要如何定位呢?

xpath

@Whsnd win10 系统,连接手机成功,但是界面不显示,不过可以进行点击操作,代码也显示。。。这个问题解决了吗

请问支持 IOS 自动化测试吗

click 按下没有抬起的事件,导致再 click 该按钮的时候无法点击

yu 回复

d.touch.up()

codeskyblue 回复

但是我发现我下载的 uiautomator2 运行 xpath 方法的时候提示不支持,有点不是很懂。并且我还有几个疑问麻烦楼主帮忙看下:
1.如果实现原理是手机中封装了 uiautomator2 的 HTTP 服务,可以解析 PC 端发过来的 HTTP 请求(故需要 PC 和手机在一个网络下),那么如果是使用 qpython 的话,是在手机端自行触发的,这样就不需要 PC 并且也不需要这个网络环境了?

陈立志 回复

这个问题解决了吗 ?我的也是和你的一样啊 OPPO A57

代码贴出来看看

1、使用 python -m weditor 启动了,报了个 403 错误。请问大佬这个是什么情况,ui2 已经用的最新版本。并提示 init 成功。
2、我是 genymotion 模拟器起的 6.0 版本

500 GET /api/v1/devices/98d26007-e512-44de-aefa-fa71669c427a/screenshot,,这是什么原因

simple [精彩盘点] TesterHome 社区 2018 年 度精华帖 中提及了此贴 01月07日 12:08


楼主帮忙看看这是啥情况,谢谢

并行跑自动化测试是通过什么实现的了?

android 模拟器是不是不能输入中文,有什么解决办法吗

楼主好,在 python -m uiautormator2 init 时报错,我找到了 uiautormator2 main.py 里报错的代码,但不知道该如何解决,网上也没找到相关的解决方案,请问楼主有遇到过类似问题吗?最后如何解决?

楼主 pip install --pre -U uiautomator2 命令 安装 atx 成功了
为什么运行 Python 脚本链接手机一直报这个错误:RuntimeWarning: backend atx-agent is not alive, start again ...

楼主好,weditor 连接 android8.1.0 手机,点击 connect 没有反应。操作系统是 win10,浏览器是 chrome,浏览器报错信息如下:

tudou 回复

jQuery 没加载,刷新下

@codeskyblue 楼主好,注册了 watcher 来监听页面的弹窗,发现有的时候响应很快,有的时候响应很慢,偶尔还会没有响应,这是什么原因呢,是和解析页面元素速度有关系么?

codeskyblue 回复

谢谢,已经解决

使用 dump_hierarchy() 函数有的 text 得不到值是什么原因?谢谢楼主大大解答,比如 QQ 空间里的说说 都载入不了

剪烛 利用 ATX 做安卓电量自动化测试 中提及了此贴 05月23日 16:03

楼主好,启动 weditor 后,连接设备时提示 “ Local server not started, start with $ python -m weditor ”,控制台输出如下图:

请问这种情况如何解决呢?

操作系统:MacOS 10.14.5
Python 版本:Python 3.7.2
Android 系统版本:7.1.1

请教下大家,同一条用例循环跑几百次时,经常出现这个错误

appium 的?



codeskyblue 我需要切 webview 的时候,device_ip 已经是 atx_agentx 显示的 ip 地址了,端口是 init 启动的端口,同时我也尝试过指定 adb tcpip 5555,都是提示 Message: unknown error: Device 10.1.25.195:5555 is not online,请教一下怎么解决?


我启动 weditor 后没有报错,但是显示是空白的,我查了手机是已经连接上了,这个是怎么回事呢?

大神求救

lomyc 回复

那个 weditor 启动了,你别退出呀

codeskyblue 回复

是启动了,但是你看我下面截图,我的页面是空白的啊😂 😂 😂 😂
不知道咋回事啊

codeskyblue 回复

因为是空白的,所以我才又重启了几次,还是空白的

uiautomator2,有支持 IOS 的计划吗?

lomyc 回复

是挂代理了?还是网不好

146楼 已删除
miaohaidong 回复

我也是报错这个,怎么解决的啊

换手机后 resourceId 发生了变化,怎样才能解决这个问题

147楼 已删除

connect 成功,但是截屏显示空白,点击 Dump Hierarchy 报错:cannot identify image file <_io.BytesIO object at 0x0000000004ED00A0>

请问这个是什么原因

miaohaidong 回复

请问最后是怎么解决的。。我也是这个问题。😅

花开 ATX init 流程和 api 学习杂记 中提及了此贴 10月08日 01:28


为什么 connect 的时候会出现这种错误

listen port 17310
Traceback (most recent call last):
File "C:\Users\zzh1019\AppData\Local\Programs\Python\Python38\lib\runpy.py", line 192, in run_module_as_main
return _run_code(code, main_globals, None,
File "C:\Users\zzh1019\AppData\Local\Programs\Python\Python38\lib\runpy.py", line 85, in _run_code
exec(code, run_globals)
File "C:\Users\zzh1019\AppData\Local\Programs\Python\Python38\lib\site-packages\weditor__main
.py", line 474, in
main()
File "C:\Users\zzh1019\AppData\Local\Programs\Python\Python38\lib\site-packages\weditor__main
.py", line 470, in main
run_web(args.debug, args.port)
File "C:\Users\zzh1019\AppData\Local\Programs\Python\Python38\lib\site-packages\weditor__main
_.py", line 414, in run_web
application.listen(port)
File "C:\Users\zzh1019\AppData\Local\Programs\Python\Python38\lib\site-packages\tornado\web.py", line 2042, in listen
server.listen(port, address)
File "C:\Users\zzh1019\AppData\Local\Programs\Python\Python38\lib\site-packages\tornado\tcpserver.py", line 144, in listen
self.add_sockets(sockets)
File "C:\Users\zzh1019\AppData\Local\Programs\Python\Python38\lib\site-packages\tornado\tcpserver.py", line 157, in add_sockets
self._handlers[sock.fileno()] = add_accept_handler(
File "C:\Users\zzh1019\AppData\Local\Programs\Python\Python38\lib\site-packages\tornado\netutil.py", line 268, in add_accept_handler
io_loop.add_handler(sock, accept_handler, IOLoop.READ)
File "C:\Users\zzh1019\AppData\Local\Programs\Python\Python38\lib\site-packages\tornado\platform\asyncio.py", line 79, in add_handler
self.asyncio_loop.add_reader(
File "C:\Users\zzh1019\AppData\Local\Programs\Python\Python38\lib\asyncio\events.py", line 501, in add_reader
raise NotImplementedError
NotImplementedError

这个问题是怎么回事

zzh-1019 回复

还不支持 python3.8,换成 3.7 就好了

想请教如果一个监听在一段脚本里不想要 remove() 掉了,在其他地方还是想再次启用的,还得把这个创建监听的过程在写一遍么

148楼 已删除

目前我通过多线程实例化多个 client,并且让多个 client 同时执行操作。我发现在实现过程中,它们并行不能同时执行操作,只能使用多进程去处理的时候,才能多设备执行,
但是由于其他原因,不能使用多进程去写,所以想来讨教一下,有没有什么方式让 uiautomatot2 可以多设备并发执行任务

def Plan_start2(self):
    clients = []
    for phoneinfo in self.selected_phones:
        try:
            client = u2.connect(phoneinfo[1])
            clients.append((client, phoneinfo))
        except:
            logging.info('设备:%s 连接状态异常' % phoneinfo[0])
            self.abnormal_state(phoneinfo)
            return
    self.starttime = datetime.datetime.now()
    logging.info('运行开始时间:%s' % self.starttime.strftime('%H:%M:%S'))
    for client, phoneinfo in clients:    #针对每个手机创建一个线程
        p = np.Process(target=self.phone_plan, args=(client, phoneinfo,))
        p.run()
~ $ python3 -m weditor
listening on http://172.31.126.53:17310
[I 200410 21:38:57 web:2162] 304 GET / (::1) 11.53ms
[I 200410 21:38:57 web:2162] 304 GET /api/v1/version (::1) 0.71ms
[W 200410 21:39:00 connectionpool:662] Retrying (Retry(total=2, connect=3, read=None, redirect=None, status=None)) after connection broken by 'ProtocolError('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))': /version
[W 200410 21:39:01 connectionpool:662] Retrying (Retry(total=1, connect=3, read=None, redirect=None, status=None)) after connection broken by 'ProtocolError('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))': /version
[W 200410 21:39:03 connectionpool:662] Retrying (Retry(total=0, connect=3, read=None, redirect=None, status=None)) after connection broken by 'ProtocolError('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))': /version
[I 200410 21:39:03 init:129] uiautomator2 version: 2.4.3.dev8

连接 weditor 无法 connect 设备。有人遇到过这样的问题吗?一直无法解决...

我电脑启动的模拟器,weditor 打开,也连接上了,但是我再 weditor 中点击 app 怎么一点反应都没

connect 设备,会报错,怎么解决
import humanize
ModuleNotFoundError: No module named 'humanize'

huihui178 回复

什么版本?

codeskyblue 回复

python3.7 的

149楼 已删除

import 这个库干嘛?

xiaoxiao 回复

我跑脚本也经常出现抛 RemoteDisconnected 的异常,而且是随机性的出现;看了一些技术论坛的帖子,得出的结论貌似是 python 本身的 bug,也一直没找到解决的方法。你最近有解决方案了吗?

150楼 已删除

请问一下楼主,报这个错误怎么解决呢?[Errno PIL.Image.open IOError] cannot identify image file <_io.BytesIO object at 0x0000017B03479348>

我有过尝试在手机上截图,也是无法截图的

想咨询一下 就是用 WEditor 定位应用的时候 像那种点击一下屏幕才出来的一些按钮怎么定位到? 我点击没用😂

151楼 已删除
index9-44 回复

我在 win 10 上也出现了这个问题,之前在 mac 端并未遇到过,@codeskyblue 请问该怎么解决呢?

PC 和手机在同一个网段,并且 PC 能 ping 通手机,为什么 connect 连不上?![](/uploads/photo/2022/13240520-b388-

diz2zy 回复

m,我也遇到这个问题了

大神,为什么有些控件识别的时候很慢,并且有时候能识别成功,有时候就识别不成功,最近因为这个搞的很头大

大佬,现在支持多点触控吗?比如三指滑动,我只找到两指手势的方法,没找到更多的

请问 uiautomator2 支援同一台电脑连多台 andorid 设备吗?
目前我使用上时不时会遇到其中一台的设备会断线

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