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

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

前言

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

简单介绍

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 条回复 时间 点赞

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

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

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

diz2zy 回复

m,我也遇到这个问题了

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

index9-44 回复

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

151楼 已删除

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

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

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

150楼 已删除
xiaoxiao 回复

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

import 这个库干嘛?

149楼 已删除
codeskyblue 回复

python3.7 的

huihui178 回复

什么版本?

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

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

~ $ 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 设备。有人遇到过这样的问题吗?一直无法解决...

目前我通过多线程实例化多个 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()
148楼 已删除

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

zzh-1019 回复

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

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

这个问题是怎么回事


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

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

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

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

请问这个是什么原因

147楼 已删除

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

miaohaidong 回复

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

146楼 已删除
lomyc 回复

是挂代理了?还是网不好

uiautomator2,有支持 IOS 的计划吗?

codeskyblue 回复

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

codeskyblue 回复

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

lomyc 回复

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


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

大神求救



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

appium 的?

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

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

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

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

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

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

codeskyblue 回复

谢谢,已经解决

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

tudou 回复

jQuery 没加载,刷新下

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

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

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

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

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


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

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

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

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

代码贴出来看看

陈立志 回复

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

codeskyblue 回复

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

yu 回复

d.touch.up()

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

请问支持 IOS 自动化测试吗

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

xpath

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

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

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


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

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

codeskyblue 回复

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

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

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

Montion912 回复

升级

仅楼主可见

使用 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 这句, 问题依旧。

wujiajing 回复

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

发现使用 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 不会有这种现象。
请问有大佬知道怎么解决吗?

我在进行到

就卡住了,提示如下 error

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

仅楼主可见
陈立志 回复

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

143楼 已删除

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

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

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

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

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

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

codeskyblue 回复

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

codeskyblue 回复

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

墨语 回复

在代码编辑器里面写 :)

使用 USB 连接

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

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

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

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

codeskyblue 回复

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

arsenalley 回复

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

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

异彩飞天 回复

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

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


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

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

本人弄了一台 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 回复


界面 430

codeskyblue 回复


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

codeskyblue 回复

三星 s8 安卓版本 8.0

Whsnd 回复

手机型号也说下


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

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

请问,我安装好了。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] ',))

XG2 回复

换成 chrome 就没事了

CC 回复

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

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

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

xiaqing 回复

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

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 回复

网络错误,github 被强了吧

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

零飞飞 回复

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

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

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

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

请问支持 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]

chunyong 回复

单个设备很稳定?

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

陈雷 回复

多谢反馈,会渐渐完善的

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

codeskyblue 回复


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

miaohaidong 回复

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


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

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

蔡瑞淳 回复

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

执行 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'

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

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

huj 回复

没 init

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

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

github 上就没介绍 weditor……

webview 用 selenium 就好了

匿名 #7 · 2017年12月26日

支持移动端 webview 吗

原生 回复

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

仅楼主可见
我去催饭 回复

不支持 xpath 可以支持 text textContains

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

我去催饭 回复

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

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

威武

火钳 占楼

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