ATX atx-server 安卓集群管理 安装运行及自动化的实践

linpengcheng · 2018年01月10日 · 最后由 linpengcheng 回复于 2024年04月03日 · 19154 次阅读

最近将公司的设备通过 stf 进行了集中管理,有个问题就是所有的设备都要用数据线连接电脑,而且根据官网的说明 ,对 usbHub 的要求貌似还很高。
在半夜逛论坛的过程中发现@codeskyblue 的帖子:https://testerhome.com/topics/11546
根据https://github.com/openatx/atx-server
安装成功!
设备只要充着电就可以实现集群管理 ,美滋滋。。。

接下来 把安装的大致步骤记录下来供大家参考:

1、首先安装 Golang go 语言开发环境和 rethinkdb:
安装 Golang 环境
下载地址:https://golang.org/dl/
安装说明:http://www.runoob.com/go/go-environment.html

安装好 rethinkdb
https://rethinkdb.com/docs/install/

mac 系统的话 可以直接用 brew 安装
brew install go
brew install rethinkdb

2、安装 atx-server
注意:可能需要*才能安装成功

go get -v github.com/openatx/atx-server

3、build atx-server
Mac 下的 Gopath 为: /Users/test/go

$ cd go/src/github.com/openatx/atx-server        
$ go build

如果 build 报错,一般都是由于第二步 go get 的时候没有把相关的依赖全部下载完成导致的。
> 解决办法

检查 GOPATH/src/golang.org/x文件夹是否存在,在 x文件夹下是否存在以下三个文件夹cryptonetsys

如果没有 就重新执行步骤 2 的命令下载相关依赖文件
实在下载不下来的可以从 golang 的 gitlab 上手动下载相关的 zip 包 解压重命名为cryptonetsys后放到 GOPATH/src/golang.org/x文件夹下
https://github.com/golang/net
https://github.com/golang/sys
https://github.com/golang/crypto

4、启动 rethinkdb 和 atx-server

$ rethinkdb --http-port 8090     #指定端口启动rethinkdb

#启动atx-server
$ cd /Users/test/go/src/github.com/openatx/atx-server  
$ ./atx-server --port 8000

这样 打开浏览器,输入地址127.0.0.1:8000 或者本机的 ip 地址加端口号 172.16.120.20:8000
就可以直接访问 atx-server 的地址了

5、安装 uiautomator2 并将其装到手机上
电脑端 pip install 安装好 uiautomator2 之后,将安卓设备连接到电脑,确保 adb devices 能够识别到设备
之后再执行第二行代码,将自动将 uiautomator 安装到手机上 并自动运行
其中 init 后面的 IP 地址为步骤 4 启动 atx-server 的电脑的 ip:8000 本机的 stx-server 地址为 172.16.120.20:8000

$ pip install  --pre --upgrade uiautomator2        #安装uiautomator2 

$ python -m uiautomator2 init 172.16.120.20:8000        #将uiautomator安装到手机设备上

安装的 log 信息如下,可以看到设备的对应 IP:

testdeMac-mini:~ test$ python -m uiautomator2 init 172.16.120.20:8000 
2018-01-10 15:11:33,546 - __main__.py:221 - INFO - atx-server addr 172.16.120.20:8000
2018-01-10 15:11:33,572 - __main__.py:236 - INFO - Device(0642f8d6f0ec9d1a) initialing ...
2018-01-10 15:11:33,818 - __main__.py:115 - INFO - install minicap
2018-01-10 15:11:33,925 - __main__.py:122 - INFO - install minitouch
2018-01-10 15:11:35,755 - __main__.py:143 - INFO - app-uiautomator.apk(1.0.6) installing ...
2018-01-10 15:12:04,397 - __main__.py:157 - INFO - atx-agent(0.1.4) already installed, skip
2018-01-10 15:12:06,255 - __main__.py:206 - INFO - atx-agent output: server started, listening on 192.168.2.4:7912
2018-01-10 15:12:06,256 - __main__.py:207 - INFO - success
2018-01-10 15:12:06,256 - __main__.py:236 - INFO - Device(5eb2b636) initialing ...
2018-01-10 15:12:06,516 - __main__.py:115 - INFO - install minicap
2018-01-10 15:12:06,688 - __main__.py:122 - INFO - install minitouch
2018-01-10 15:12:09,107 - __main__.py:143 - INFO - app-uiautomator.apk(1.0.6) installing ...
2018-01-10 15:12:17,802 - __main__.py:157 - INFO - atx-agent(0.1.4) already installed, skip
2018-01-10 15:12:19,329 - __main__.py:206 - INFO - atx-agent output: server started, listening on 192.168.2.3:7912
2018-01-10 15:12:19,329 - __main__.py:207 - INFO - success

6、全都就绪 ,打开浏览器访问就可以啦
http://localhost:8000/
http://172.16.120.20:8000/ # 我电脑的局域网 IP 地址 别人电脑访问这个地址也能打开页面

################################################################################
自动化的 demo 实践:

在步骤 5 中可以看到 Device(0642f8d6f0ec9d1a) nexus5 的 ip 是 192.168.2.4:7912
写了个简单的运行网易云音乐的 demo 脚本:

import uiautomator2 as ut2

def main():
    u = ut2.connect('192.168.2.4: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()

打开http://localhost:8000/ 看看 nexus5 脚本运行的效果:

ATX QQ 交流群:499563266

附言 1  ·  2018年05月29日
  • server 也起来了,init 也成功了 ,网络也能 ping 通的 ,但是网页上还是没有出现设备 看看启动 server 的电脑没有用装了什么杀毒软件 防火墙之类的 关了再试试看
附言 2  ·  2018年05月29日
  • server 也起来了,init 也成功了 ,网络也能 ping 通的 ,但是网页上还是没有出现设备 看看启动 server 的电脑没有用装了什么杀毒软件 防火墙之类的 关了再试试看
附言 3  ·  2018年05月29日
  • 为什么启动 atx-server 后 浏览器打不开
    看看你是不是在 atx-server 的文件夹下启动服务,需要cd go/src/github.com/openatx/atx-server/ 到 atx-server 目录下载执行./atx-server

  • 为什么手机 init 成功了之后,在 web 上没有出现设备?
    确保你的手机和你启动 atx-server 的电脑在同一个 wifi 下面,不在一个 wifi 下面,怎么可能连上呢?

  • 我的手机python -m uiautomator2 init报错,init 不成功
    把手机上安装过的 uiautomator 的 app 给删掉,之前 macaca、appium 安装的 uiautomator 的 app 也删了 。重新安装 uiautomator,重启手机。还是 init 失败,那就换台手机吧

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
最佳回复
明杰 回复

python -m uiautomator2 init 命令重构

为了修复一下 init 数字开头的 serial 的设备出错的问题。init 这部分的代码使用 argparse 重构了一下。抛弃了原来的 google-fire 库
新的用法可以通过--help 查看帮助
python -m uiautomator2 init --help

部分使用方法有所修改
旧命令 python -m uiautomator2 init $IP
新命令 python -m uiautomator2 init --server $IP
指定设备 init 的时候方法不变python -m uiautomator2 init --serial $SERIAL

共收到 200 条回复 时间 点赞

实践的挺快的嘛。最近有时间了,所以这个 atx-server 我估计还会加些别的功能,比如安装,看日志

codeskyblue 回复

👍

ss*** 了,google 能上了,就是下载不下来,好忧伤

223楼 已删除
adonisjph 回复

我在 App Store 上随便找了个免费的 *** 开着就可以下成功了。
ss 是不是不是全局 *** 的?

linpengcheng 回复

嗯,全局的,换了几个节点都不行,所以很郁闷

adonisjph 回复

换个 wifi 试试看

好东西,最近打算基于这个看能不能搞定设备实时管理。资产登记的话用起来繁琐,容易信息滞后。

218楼 已删除

我昨天晚上折腾了好久 SS 也没拉下来,后来手动 go get github.com/golang/net 拉下来,然后 mkdir golang.org/x 再把拉下来的 net 目录移到 olang.org/x 目录搞定

workhard 回复

曲线救国😁

codeskyblue 安卓设备集群管理 atx-server 中提及了此贴 01月12日 09:27
adonisjph 回复

我的是 Windows,给命令行设置了下就可以
set http_proxy=http://127.0.0.1:1080
set https_proxy=http://127.0.0.1:1080

啵板 回复

我 *** 了……可以了

环境搭建起来了,和楼主一样精彩碰到最后一个问题。
另外,怎么远程控制安装 app 呢?

lin 回复

远程控制界面比较原始,你也看到了。不过可以用 uiautomator2 这个库执行安装,传递一个 apk 的 url 就可以了

@codeskyblue 相比较 STF 可能做得更好些,不过远程连接这个 比有线连接方便多了

lin 回复

嗯,各有利弊

@cynic 点击眼睛以后怎么操作页面呢,我怎么操作都不会显示内容

wuming 回复

没显示手机页面嘛?

linpengcheng 回复

是的,没有显示手机页面,我的是红米 4

wuming 回复

换个手机看看

在步骤 3 下补充了在没有 *** 下 go get 安装 atx-server 时 golang 相关包无法下载手动解决办法

能否将其和 stf 综合一下 哪位大侠写一把看看😁😁

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

rockyrock 回复

stf 功能多而全,atx 虽然没 stf 那么多功能,但是也够用。最主要的是,stf 需要设备通过 usb 连接;atx 只要手机有电,连着同一个 Wi-Fi 就行了。感觉比 stf 稳定,毕竟 stf 上有的设备会老掉线,且对 usb hub 的要求挺高的。

Jerry li atx 安卓集群管理 - 实践与扩展思路 中提及了此贴 01月22日 15:55

调整了一下 golang 的 vendor,现在编译应该不用 *** 了

匿名 #199 · 2018年01月22日

在 Windows 折腾了很久才基本装完,在执行 python -m uiautomator2 init 172.16.120.20:8000 的时候报 subprocess.CalledProcessError:command'adb -s xxx --list' returned non-zero exit status 1。 打算明天有时间在去看看源码是怎么样操作的。
这个问题已经解决了,是因为 5037 端口被占用了,然后安装成功后又有一个新问题,页面不显示设备?

后面的 IP 要用你启动服务的电脑的 IP ,端口 8000 是步骤 4 atx-server -addr :8000 设定的端口号。
你 ipconfig 看一下你的电脑 IP 是多少

但是你的报错好像是没有找到安卓设备吧
adb devices 看看有没有识别到你的手机

匿名 #196 · 2018年01月23日
linpengcheng 回复

这个问题已经解决了,是因为 5037 端口被占用了,
安装成功后打开 localhost:8000 没有显示连接的设备,但是打开 RethinkDB(localhost:8090)可以看到连接了 2 个设备的(Tables 2 ready)
(这个也解决了,一开始是用公司 WIFI,换成自己的手机热点就 OK)

修改启动 atx server 启动命令为: atx-server --port 8000
https://github.com/openatx/atx-server/commit/b5c5478878039f849c95e7bcc0710c47ed50e6a4

194楼 已删除
匿名 #193 · 2018年02月28日

控制设备打开的应用变成横屏的显示怎么解决

@cynic 楼主,你好;我这边访问网页,只有 atx-server 框架页面,没有显示手机信息,请问是哪里原因?

lb 回复

我是通过 usb 线和电脑连接的,是一定要通过 wifi 连接吗?

不错! 但是也有两个缺点:
1、手机依然需要开启 usb 调试
3、wifi 不如用数据线连接速度快,设备多了很容易掉线

lb 回复

手机要执行第 5 步的操作,先连线设备执行python -m uiautomator2 init ATX_SERVER_IP 手机安装上一个 apk 应该可以了 然后手机 wifi 和启动服务的电脑的 ip 在同一个局域网

linpengcheng 回复

第 5 步执行成功了,手机上已经有 uiautomator APK 了,但访问网页,还是会没有手机相关信息;

lb 回复

ip 是不是不对 ?

linpengcheng 回复

IP 地址是对的,我换台手机试下;

linpengcheng 回复

换了台手机还是不行,请大神帮忙看下;
需要提供哪些日志信息;

lb 回复

换个网络看看 要么电脑共享个热点出来看看

lb 回复

init 之后 手机是不是安装了个 uiautomator 的 apk 上去?

chunyong 回复

init 完了之后,usb 调试是可以关掉的

wuming 回复

今天在 stf 上连接红米手机遇到无法连上的问题 然后再开发者选项里的 允许模拟点击选项之后就好了 可能这也是一样的原因吧

你开启允许模拟点击再试试

linpengcheng 回复

恩恩,我已经成功了

最后的那个问题,atx-agent 0.2.1 版本修复了

我在连接设备时也遇到这个问题:Command 'adb -s 127.0.0.1:62001 forward --list' returned non-zero exit status 1
但是查了端口,5037 端口是 adb.exe,请问还有可能是什么原因呢?

177楼 已删除


有遇到这个坑的朋友吗?

回复

少了个文件忘记提交,你 go get -u一下,重新更新下依赖

codeskyblue 回复

下载失败,不成功啦,谢谢楼主~

回复

可以可以

172楼 已删除
171楼 已删除

开发者选项里有个允许模拟点击 把它打开应该就好了

2018-05-11 14:55:15,896 - main.py:212 - INFO - launch atx-agent daemon
Traceback (most recent call last):
File "D:\Program Files (x86)\Python\Python36-32\lib\site-packages\urllib3\connectionpool.py", line 387, in _make_request
six.raise_from(e, None)
File "", line 2, in raise_from
File "D:\Program Files (x86)\Python\Python36-32\lib\site-packages\urllib3\connectionpool.py", line 383, in _make_request
httplib_response = conn.getresponse()
File "D:\Program Files (x86)\Python\Python36-32\lib\http\client.py", line 1331, in getresponse
response.begin()
File "D:\Program Files (x86)\Python\Python36-32\lib\http\client.py", line 297, in begin
version, status, reason = self._read_status()
File "D:\Program Files (x86)\Python\Python36-32\lib\http\client.py", line 258, in _read_status
line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
File "D:\Program Files (x86)\Python\Python36-32\lib\socket.py", line 586, in readinto
return self._sock.recv_into(b)
socket.timeout: timed out

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "D:\Program Files (x86)\Python\Python36-32\lib\site-packages\requests\adapters.py", line 440, in send
timeout=timeout
File "D:\Program Files (x86)\Python\Python36-32\lib\site-packages\urllib3\connectionpool.py", line 639, in urlopen
_stacktrace=sys.exc_info()[2])
File "D:\Program Files (x86)\Python\Python36-32\lib\site-packages\urllib3\util\retry.py", line 357, in increment
raise six.reraise(type(error), error, _stacktrace)
File "D:\Program Files (x86)\Python\Python36-32\lib\site-packages\urllib3\packages\six.py", line 686, in reraise
raise value
File "D:\Program Files (x86)\Python\Python36-32\lib\site-packages\urllib3\connectionpool.py", line 601, in urlopen
chunked=chunked)
File "D:\Program Files (x86)\Python\Python36-32\lib\site-packages\urllib3\connectionpool.py", line 389, in _make_request
self._raise_timeout(err=e, url=url, timeout_value=read_timeout)
File "D:\Program Files (x86)\Python\Python36-32\lib\site-packages\urllib3\connectionpool.py", line 309, in _raise_timeout
raise ReadTimeoutError(self, url, "Read timed out. (read timeout=%s)" % timeout_value)
urllib3.exceptions.ReadTimeoutError: HTTPConnectionPool(host='localhost', port=63463): Read timed out. (read timeout=3)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "D:\Program Files (x86)\Python\Python36-32\lib\runpy.py", line 193, in run_module_as_main
"
main", mod_spec)
File "D:\Program Files (x86)\Python\Python36-32\lib\runpy.py", line 85, in _run_code
exec(code, run_globals)
File "D:\Program Files (x86)\Python\Python36-32\lib\site-packages\uiautomator2__main
.py", line 356, in
main()
File "D:\Program Files (x86)\Python\Python36-32\lib\site-packages\uiautomator2__main
.py", line 352, in main
fire.Fire(MyFire)
File "D:\Program Files (x86)\Python\Python36-32\lib\site-packages\fire\core.py", line 127, in Fire
component_trace = _Fire(component, args, context, name)
File "D:\Program Files (x86)\Python\Python36-32\lib\site-packages\fire\core.py", line 366, in _Fire
component, remaining_args)
File "D:\Program Files (x86)\Python\Python36-32\lib\site-packages\fire\core.py", line 542, in _CallCallable
result = fn(*varargs, **kwargs)
File "D:\Program Files (x86)\Python\Python36-32\lib\site-packages\uiautomator2__main
.py", line 273, in init
ignore_apk_check)
File "D:\Program Files (x86)\Python\Python36-32\lib\site-packages\uiautomator2__main
.py", line 295, in _init_with_serial
ins.launch_and_check()
File "D:\Program Files (x86)\Python\Python36-32\lib\site-packages\uiautomator2__main
_.py", line 225, in launch_and_check
'http://localhost:%d/version' % lport, timeout=3)
File "D:\Program Files (x86)\Python\Python36-32\lib\site-packages\requests\api.py", line 72, in get
return request('get', url, params=params, **kwargs)
File "D:\Program Files (x86)\Python\Python36-32\lib\site-packages\requests\api.py", line 58, in request
return session.request(method=method, url=url, **kwargs)
File "D:\Program Files (x86)\Python\Python36-32\lib\site-packages\requests\sessions.py", line 508, in request
resp = self.send(prep, **send_kwargs)
File "D:\Program Files (x86)\Python\Python36-32\lib\site-packages\requests\sessions.py", line 618, in send
r = adapter.send(request, **kwargs)
File "D:\Program Files (x86)\Python\Python36-32\lib\site-packages\requests\adapters.py", line 521, in send
raise ReadTimeout(e, request=request)
requests.exceptions.ReadTimeout: HTTPConnectionPool(host='localhost', port=63463): Read timed out. (read timeout=3)

初始化时候报这个错 怎么解决呢?

168楼 已删除
急急急 回复

adb shell rm /data/local/tmp/atx-agent 之后 再执行 python -m uiautomator2 init试试看

准备实践下,想请教下楼主,atx-agent 如何解决国内各种定制手机的 apk 安装的限制? 比如 oppo、vivo 的帐号弹框,vivo 还有个烦人的模拟点击,小米的安全权限等等。

另外安卓手机还有 bug,存在 uid leak 的情况,简单来说就是 apk 循环安装卸载,重复 10000 次,手机就没办法再安装 apk 了,我报给 google,但是 google 不修。这就意味着手机需要定时重启,重启后如何拉起等等问题。

C:\Users\renchuanbin>python -m uiautomator2 init 192.168.137.104:8000
2018-05-18 13:58:35,549 - main.py:254 - INFO - atx-server addr 192.168.137.104:8000
2018-05-18 13:58:35,572 - main.py:269 - INFO - Detect pluged devices: [u'192.168.137.118:5555']
2018-05-18 13:58:35,572 - main.py:286 - INFO - Device(192.168.137.118:5555) initialing ...
2018-05-18 13:58:35,842 - main.py:113 - INFO - install minicap
2018-05-18 13:58:36,160 - main.py:120 - INFO - install minitouch
2018-05-18 13:58:36,407 - main.py:137 - INFO - apk(1.0.14) already installed, skip
2018-05-18 13:58:36,509 - main.py:175 - INFO - atx-agent(0.3.2) already installed, skip
2018-05-18 13:58:36,648 - main.py:212 - INFO - launch atx-agent daemon
2018-05-18 13:58:41,788 - main.py:238 - ERROR - failure

请问启动 atx-agent 失败 是怎么回事呢?

奋斗的鸡腿 launch atx-agent daemon 失败解决办法 中提及了此贴 05月18日 18:16

请问下,我使用的是 usb 链接,界面启动成功,但是不能看到我链接上的设备信息。使用 adb devices 也能拼到设备是链接成功的

执行下python -m uiautomator2 init 10.0.34.75:8000后面换成你 server 的 ip

linpengcheng 回复

init 了的,也显示 success 了的

sherrycc 回复

手机和电脑在同一个 wifi 下吗?

linpengcheng 回复

好像不是。。

linpengcheng 回复

链接到同一个 wifi 下面,也不行。。

sherrycc 回复

感觉就是局域网的问题 你网路再看看

linpengcheng 回复

网页可以正常显示了,应该是局域网的问题。我直接用手机分享无线网,然后电脑连接这个无线网,就可以正常显示了,但是有个问题不知道是不是正常的:我在 init 里面,显示的监控的设备 ip 和网页上面显示的 IP 不一致,一直是 offline 的状态

sherrycc 回复

offline 显示的 ip 还是之前的设备 ip 再重新 online 后 就会变成正确的了 所以你还是搞个无线路由器试试看吧

linpengcheng 回复

好的,谢谢~~我搭建出来的网页,第 5 步哪里,没有眼睛图标可以点击,直接点更多下面的图标,跳转过去就一直是黑色的。。请问下这个是我搭建的问题么?

sherrycc 回复


现在的页面长这样了 点击use跳转到操作页面
你说的黑色页面 是 shell 页面吧 可以直接输入 shell 命令操作手机 adb shell一样

linpengcheng 回复

好的~谢谢啦,非常感谢大佬提供帮助👍 👍 👍 👍

小米 5S 连接上了,但是鼠标点屏幕没反应。有谁遇到过么,在开发者选项中也没找到 允许模拟点击选项。

点下面的 home,back 键倒是有反应。

另外一台 oppo R9 倒是有反应

cloudwind 回复

不同 miui 的系统版本可能不太一样 在设置下仔细找找看

linpengcheng 回复

找了半天实在没找到这选项,是不是小米手机都有这个问题。

cloudwind 回复

有的好像不用设置的

python -m uiautomator2 init 192.168.165.2:8000
2018-05-29 10:27:41,334 - __main__.py:254 - INFO - atx-server addr 192.168.165.2:8000
Traceback (most recent call last):
  File "E:\Python35\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "E:\Python35\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "E:\Python35\lib\site-packages\uiautomator2\__main__.py", line 352, in <module>
    main()
  File "E:\Python35\lib\site-packages\uiautomator2\__main__.py", line 348, in main
    fire.Fire(MyFire)
  File "E:\Python35\lib\site-packages\fire\core.py", line 127, in Fire
    component_trace = _Fire(component, args, context, name)
  File "E:\Python35\lib\site-packages\fire\core.py", line 366, in _Fire
    component, remaining_args)
  File "E:\Python35\lib\site-packages\fire\core.py", line 542, in _CallCallable
    result = fn(*varargs, **kwargs)
  File "E:\Python35\lib\site-packages\uiautomator2\__main__.py", line 261, in init
    output = subprocess.check_output(['adb', 'devices'])
  File "E:\Python35\lib\subprocess.py", line 316, in check_output
    **kwargs).stdout
  File "E:\Python35\lib\subprocess.py", line 383, in run
    with Popen(*popenargs, **kwargs) as process:
  File "E:\Python35\lib\subprocess.py", line 676, in __init__
    restore_signals, start_new_session)
  File "E:\Python35\lib\subprocess.py", line 957, in _execute_child
    startupinfo)
FileNotFoundError: [WinError 2] 系统找不到指定的文件
尹全旺 回复

adb 没装? 手动执行adb devices看看

win 环境下
3、build atx-server
Mac 下的 Gopath 为: /Users/test/go
$ cd $GOPATH/src/github.com/openatx/atx-server #GOPATH=‘/Users/test/go’

以上要改为

要用 echo %GOPATH% 来确认路径 和
cd %GOPATH%\src\github.com\openatx\atx-server 来切换 或者绝对路径切换

还有已知开启 360 或者 eset 杀软,会影响连接真机.需要关掉 360 或暂停 esst 防护才可.

手机重启后就连接不上了,又要重新连电脑装包才行,能不能安装一次之后,可以在手机上手动启动

huan 回复

连接 usb 调用一下 /data/local/tmp/atx-agent -d 就可以

codeskyblue 回复

有没有不连接 usb,在手机端启动??好像 atx 对横屏支持还不太友好喔

linpengcheng 基于 ATX-Server 的 UI 自动化测试框架 中提及了此贴 06月18日 22:20
老马 ATX 安卓集群管理 atx-server 使用记录整理 中提及了此贴 06月20日 14:45

用虚拟机测试,在 web 页面上显示不出设备

是的,模拟器不支持

必须要连接 WIFI 且在同一网段下吗?我断开 wifi 显示 offline 了。现在可以在页面上直接进行代码操作吗?

Joe 回复

断了 wifi 肯定不行 都是通过 http 来通信的

linpengcheng 回复

请问怎么删除 Offline 的设备呢?谢谢,同样的机器只是 IP 变了

Joe 回复

去 rethinkdb 里删掉就好了 可参考这个帖子 https://testerhome.com/topics/5848

win7 安装 atx 报错如下:

F:\Go\src>go get -v github.com/openatx/atx-server
github.com/openatx/atx-server (download)

cd .; git clone https://github.com/openatx/atx-server F:\golang\go\src\github.

com\openatx\atx-server
Cloning into 'F:\golang\go\src\github.com\openatx\atx-server'...
fatal: unable to access 'https://github.com/openatx/atx-server/:' error:1407742E
:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version
package github.com/openatx/atx-server: exit status 128

Asiazhang 回复

翻个墙试试

问下哈,这边我在安卓手机上执行命令成功安装了 uiautomator2,但是刷新 atx-server 页面却没看到设备,然后我就换了一台安卓手机同样执行命令来安装,但是却报如下错误,帮忙看下啥问题

这里点击不了,一开始可以点击 use,刷新页面就变这样了

枫叶 回复

因为已经有网页在使用该手机

codeskyblue 回复

好吧,我的锅,上面那个是啥问题,换台手机安装就报错的

枫叶 回复

像小米 oppo vivo 这些手机 adb 安装需要手动点一下允许才能安装成功

linpengcheng 回复

为什么有些手机在网页端操作不了,有些又可以操作呢

cloudwind 回复

这边小米 5 遇到同样问题,请问你的解决了吗

枫叶 回复

init 的时候 minitouch 没安装好吧 重新 init 应该就好了

rethinkdb 可以用其他替换吗

xcwstsoftware 回复

那比较难改咯

“多台设备同时执行脚本,或者先后执行同一个脚本”。有实践过的吗?
@cynic @codeskyblue

server 也起来了,init 也成功了 ,网络也能 ping 通的 ,杀毒软件 防火墙之类的也关了,手机上允许 USB 模拟权限开启了,更换过一台设备但是网页上还是没有出现设备。不知道哪里还会有问题?
@cynic 请指教

115楼 已删除
zhaiworld 回复

init 的时候 server 的 ip 填对没有?

linpengcheng 回复

本机 IP:8000 启动成功。通过 python -m weditor 也可以正常操作手机。

zhaiworld 回复

啥系统的电脑啊
不行就换个电脑看看

有点激动,立马实践下先!

thanksdanny 回复

九个月前发的帖子 你还激动?

linpengcheng 回复

发现新大陆当然激动拉

C:\Users\luoZhongXu>python -m uiautomator2 init 100.64.233.232:8000
2018-10-19 09:40:15,370 - main.py:289 - INFO - atx-server addr 100.64.233.232:8000
Traceback (most recent call last):
File "C:\Users\luoZhongXu\AppData\Local\Programs\Python\Python37\lib\runpy.py", line 193, in run_module_as_main
"
main", mod_spec)
File "C:\Users\luoZhongXu\AppData\Local\Programs\Python\Python37\lib\runpy.py", line 85, in _run_code
exec(code, run_globals)
File "C:\Users\luoZhongXu\AppData\Local\Programs\Python\Python37\lib\site-packages\uiautomator2__main
.py", line 394, in
main()
File "C:\Users\luoZhongXu\AppData\Local\Programs\Python\Python37\lib\site-packages\uiautomator2__main
.py", line 390, in main
fire.Fire(MyFire)
File "C:\Users\luoZhongXu\AppData\Local\Programs\Python\Python37\lib\site-packages\fire\core.py", line 127, in Fire
component_trace = _Fire(component, args, context, name)
File "C:\Users\luoZhongXu\AppData\Local\Programs\Python\Python37\lib\site-packages\fire\core.py", line 366, in _Fire
component, remaining_args)
File "C:\Users\luoZhongXu\AppData\Local\Programs\Python\Python37\lib\site-packages\fire\core.py", line 542, in _CallCallable
result = fn(*varargs, **kwargs)
File "C:\Users\luoZhongXu\AppData\Local\Programs\Python\Python37\lib\site-packages\uiautomator2__main
.py", line 300, in init
sn for sn, _ in adbutils.Adb().devices(states=['device'])
File "C:\Users\luoZhongXu\AppData\Local\Programs\Python\Python37\lib\site-packages\uiautomator2\adbutils.py", line 34, in devices
output = subprocess.check_output([self.adb_path(), 'devices'])
File "C:\Users\luoZhongXu\AppData\Local\Programs\Python\Python37\lib\subprocess.py", line 389, in check_output
**kwargs).stdout
File "C:\Users\luoZhongXu\AppData\Local\Programs\Python\Python37\lib\subprocess.py", line 466, in run
with Popen(*popenargs, **kwargs) as process:
File "C:\Users\luoZhongXu\AppData\Local\Programs\Python\Python37\lib\subprocess.py", line 769, in __init
_
restore_signals, start_new_session)
File "C:\Users\luoZhongXu\AppData\Local\Programs\Python\Python37\lib\subprocess.py", line 1113, in _execute_child
args = list2cmdline(args)
File "C:\Users\luoZhongXu\AppData\Local\Programs\Python\Python37\lib\subprocess.py", line 524, in list2cmdline
needquote = (" " in arg) or ("\t" in arg) or not arg
TypeError: argument of type 'NoneType' is not iterable
楼主请教一下这是什么原因。

aidada 回复

https://github.com/openatx/uiautomator2#limitation-%E9%99%90%E5%88%B6

暂时对 python37 的支持还没做 你装 pytho36 的再试一下看看

linpengcheng 回复

感谢解答,不过我换了几个版本都还是同样的问题。

aidada 回复

换个手机试试

看看你是不是在 atx-server 的文件夹下启动服务,需要 cd go/src/github.com/openatx/atx-server/ 到 atx-server 目录下载执行./atx-server
我这个地方没有这个 atx-server
但是在 usr/local/go/bin/下面有 atx-server
我在这里启动怎么 127.0.0.1:8000 没有显示

ubantu 16.04 系统

xcwstsoftware 回复

要到 gopath/src/github.com/openatx/atx-server/ 这个目录下执行./atx-server 启动才能正常
你先把 gopath 在环境变量中配置好呗

如果在 uiautomator.apk 里手动点击 “停止 UIAUTOMATOR” 和 “停止 ATXAGENT” 以后,再跑脚本就会提示需要重新安装 uiautomator.apk,怎么重新打开这两个服务呢?杀了进程重新进 App 还是没有用。

Lyzin 回复

python -m uiautomator2 init

linpengcheng 回复

那就是说,如果不小心误操作点了 uiautomator 里的停止 UIAUTOMATOR” 和 “停止 ATXAGENT”,只能通过重新安装这个 uiautomator.apk 来让服务重启了?

linpengcheng 回复

那杀 uiautomator.apk 进程是不会让这两个服务关闭吗?,只有点 “停止 UIAUTOMATOR” 和 “停止 ATXAGENT”,才算服务被关闭了?

Lyzin 回复

是的
是的
等会儿就好了

运行一段时间后,通过网页操作手机就非常卡,你们的是这样吗?有人反馈过这问题吗


大神看我这是什么情况,能看到手机,就是不能操作。。。。。。

Smile 回复

为啥 serial 都是空的

Smile 回复

我跟你遇到同样的问题,话说你解决了么

91楼 已删除
thanksdanny 回复

木有。。。。

linpengcheng 回复

出来的界面就是这样,好像没连好一样,不能操作。。。大神肿么办呀

Smile 回复

你是不是用的虚拟机的?

thanksdanny 回复

MAC 笔记本

仅楼主可见
thanksdanny 回复

这个问题很奇特啊,不知道怎么搞。。。。。

linpengcheng 回复

哦对,我用的 Python3.7,这个会不会有影响。。。。

Smile 回复

我的是 2.7 呀 也是同样问题,不过我的是虚拟机开的

thanksdanny 回复

可怕,反正就是不能用。。。。。

Smile 回复

我 mac 上部署却是正常的

thanksdanny 回复

。。。。。。。。

79楼 已删除
Smile 回复

不能用 +1

梵心一点 回复

孩怕

Smile 回复

atx-server 装不上吗?

go version # 期望1.11
git clone https://github.com/openatx/atx-server
go build

1.显示不出序列号、型号、品牌的问题我也遇到了,不过后来重新 init 了一下不知道怎么又好了~
2.大佬,想问下我在 atx-server 这边点 use 远程操作手机很灵敏,但是用 python -m weditor 打开后操作手机却非常慢。。。大概是什么问题啊~

我的小米 4 一闪而过咋回事?

一定要在同一 wifi 下吗?在同一内网行不行,同一网段?我准备部署到内网服务器上。

同一个网段就行吧,我们公司的 wifi 也是相当复杂....

我在内网服务器用 docker 启动好了,在电脑本地也用 docker 启动好了,手机上 init 成功了,通过我的电脑访问 atx-agent,也能正常显示页面,但是 init 的时候无论是把 atx-server 的地址指向服务器还是指向我同一 wifi 下的电脑的地址,atx-server 的 web 页面都没有显示设备,这个可能是什么原因?或者该如何调试?

电脑是 Mac,防火墙已经关闭

我是直接起在 mac 上的 没用 docker

xcwstsoftware 回复

我也是,弄好了,好开心,可是开个会回来发现好慢啊

因为流量是通过 wifi 的,所以不太快

我安装好,网页上也出现设备了,把 USB 从手机上拔下后,设备就消失了。。为什么啊。😂

苏立轩 回复

有的手机就是这样的 拔了之后 atx-agent 就挂了 我之前也遇到个手机 会这样 貌似是 oppo 的

现在一般都是电脑开着 u2init 手机插电脑上直接连接到 atx-agent 然后就一直插着了 不拔下来

linpengcheng 回复

那岂不是很不方便,华为荣耀也这样 😭

苏立轩 回复

反正也要插着充电的 你为啥要拔来拔去呢 ?还不是因为测试机太少。。。。。😁

linpengcheng 回复

还有一个问题,就是手机息屏后,网页上就不会显示设备了。 有什么办法解决?

苏立轩 回复

貌似大多数手机息屏后,会自动断开 wifi
atx-server'web 端操作完之后 关闭会打开 identify 的页面 你进行自动化操作之后 ,执行 d.open_identify() 回到那个黑色的页面 就不会自动息屏了

linpengcheng 回复

看别人提的意见,貌似可以通过 WOL 唤醒,还没尝试过

这个有拉日志的功能?

苏立轩 回复

我也是!我发现我的荣耀 8 也是会这样

到 init 这一步一直报错main.py: error: unrecognized arguments: 192.168.1.103:8000,可是电脑就是这个 ip 额,大神怎么解决,换了几个手机了

乱斗东 回复

解决了吗?我也想要这个答案

乱斗东 回复

ip 前面加上--server

codeskyblue 回复

现在是可以执行 python -m uiautomator2 init --server 172.16.120.20:8000;但是 server 上还是看不到手机设备,adb 是有的,ping 也 ping 通的

codeskyblue 回复

加--server 果然好了

DataDate 回复

我目前也是。。

Prowess 回复

调通了吗?遇到同样的问题

明杰 回复

python -m uiautomator2 init 命令重构

为了修复一下 init 数字开头的 serial 的设备出错的问题。init 这部分的代码使用 argparse 重构了一下。抛弃了原来的 google-fire 库
新的用法可以通过--help 查看帮助
python -m uiautomator2 init --help

部分使用方法有所修改
旧命令 python -m uiautomator2 init $IP
新命令 python -m uiautomator2 init --server $IP
指定设备 init 的时候方法不变python -m uiautomator2 init --serial $SERIAL

Prowess 回复

手机上允许 USB 模拟权限开启试过没,我选择了之后就可以看到手机了

明杰 回复

模拟器?

我的环境时 mac os,在 go/src/github.com/openatx/atx-server/ 目录下执行 ./atx-server --port 8000,提示 [FATAL][github.com/openatx/atx-server] database.go:29: gorethink: dial tcp 202.106.199.34:28015: connect: operation timed out,大家有遇到同样的问题么

gaoyuansong 回复

这个问题应该是网络问题,更换了网络,环境 OK

搭建环境后在遍历获取子元素文本的速度很慢,有好的解决方案吗

这个集群管理,只支持 WIFI, 不支持 USB 吗?

Alisa 回复

https://testerhome.com/topics/15321
配合这个 使用 ,wifi 和 usbatx-uiautomator2 都支持的

请问有人成功使用多台手机同时执行脚本的吗?

linpengcheng 回复

谢谢大佬!👍 👍

明杰 回复

刚看到,我试过了没通,以后有时间再试试

./atx-server 这个命令未找到,是怎么回事?我每次 go getv 的时候看见有些是下载超时,这个怎么解决?

科学上网

xcwstsoftware 回复

请问你是怎么解决的?

33楼 已删除
32楼 已删除
31楼 已删除

换成 py3 试试

29楼 已删除
回复

atxserver 已经不维护了 建议使用 https://github.com/openatx/atxserver2

可能是你电脑网络的问题吧

25楼 已删除

真机试试

23楼 已删除
22楼 已删除

大多数模拟器不支持 minicap

20楼 已删除
linpengcheng 回复

已经解决了,是 adb 版本问题,谢谢哈!大神


为啥是空呢?


成功了~

加上 ip ,不能识别参数

mac 源码安装的 atxserver2,
拔掉 usb 线之后,就找不到设备了……但 weditor 是可以正常连接并操作的。老大这怎么回事啊……试了小米、华为都这样

gradient30 回复

atxserver2:启动指定了 python main.py --port 8000
atx-android-provider 启动还是默认的 3500 端口,
然后初始化设备:python -m uiautomator2 init --server xx.xx.xx.xx:8000 或 3500 端口都一样,提示上边的:404 post

gradient30 回复

server2 目前还没支持 wifi 链接啊

linpengcheng 回复

😂 嗯,已经知道了……着急用了,太期待这个版本了

问一下,atx-server 与手机端是怎样通信的,执行 “python -m uiautomator2 init --server xx.xx.xx.xx:8000” 中,哪个模块把手机信息报给 atx-server 的?

starsoilder 回复

atx-agent

大佬,求问 在第三步骤 go build 时报如下错:go: github.com/qiniu/log@v0.0.0-20140728010919-a304a74568d6: invalid version: git fetch -f https://github.com/qiniu/log refs/heads/:refs/heads/ refs/tags/:refs/tags/ in /Users/go/pkg/mod/cache/vcs/e2aa7c3b2b94e14fa609a95a4fcc3ac4e9e77c1eefe42a5e5eb4d457eabbe31b: exit status 128:
fatal: could not read Username for 'https://github.com:' terminal prompts disabled
百度了一圈,也没解决,求大佬帮忙看看

木若若 回复

github.com/qiniu/log 这个项目被 qiniu 公司删掉了,另外这个项目不再维护了。请转到 https://github.com/openatx/atxserver2

9楼 已删除

太火了。评论太长了,如果建立一个专门搜索问题的地方就好了, 我也有很多已经解决的问题,想跟大家分享,这是一个好项目

哈哈,你要相信你写过的所有评论都有人看的。

pip install --pre --upgrade uiautomator2 请问下是随便安装在那个目录下就可以吗?

你执行这个命令 python 自动安装相关的库到指定的文件的 如何随便安装一个目录?

大佬,问个问题,atx 是不是只能用于模拟器的自动化,不能用于真机的

testBlue 回复

我一直用的都是真机啊

博主,我的 rethinkdb 下载了启动不了怎么办,cd 到那个文件夹下说找不到执行文件,但其实是有的。然后 go build 的时候一直有无效 zip,是 rethinkdb 没下好的原因吗?

CYN123hhh 回复

这个项目早就不再维护了,https://github.com/openatx/atxserver2 建议使用这个新的

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