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

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

最近将公司的设备通过 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文件夹下是否存在以下三个文件夹crypto、net、 sys

如果没有 就重新执行步骤 2 的命令下载相关依赖文件
实在下载不下来的可以从 golang 的 gitlab 上手动下载相关的 zip 包 解压重命名为crypto、net、 sys后放到 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,现在编译应该不用 *** 了

匿名 #27 · 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 看看有没有识别到你的手机

匿名 #31 · 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楼 已删除
匿名 #34 · 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,请问还有可能是什么原因呢?

50楼 已删除


有遇到这个坑的朋友吗?

对 星 回复

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

对 codeskyblue 回复

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

对 星 回复

可以可以

55楼 已删除
210楼 已删除

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

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)

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

59楼 已删除
对 急急急 回复

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 请指教

112楼 已删除
对 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 回复

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

136楼 已删除
对 thanksdanny 回复

木有。。。。

对 linpengcheng 回复

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

对 Smile 回复

你是不是用的虚拟机的?

对 thanksdanny 回复

MAC 笔记本

仅楼主可见
对 thanksdanny 回复

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

对 linpengcheng 回复

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

对 Smile 回复

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

对 thanksdanny 回复

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

对 Smile 回复

我 mac 上部署却是正常的

对 thanksdanny 回复

。。。。。。。。

215楼 已删除
对 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 回复

请问你是怎么解决的?

194楼 已删除
195楼 已删除
196楼 已删除

换成 py3 试试

198楼 已删除
对 清 回复

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

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

202楼 已删除

真机试试

204楼 已删除
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 建议使用这个新的

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