应用在设备上运行时无法获取 uiautomator 工具中的元素
Posted
技术标签:
【中文标题】应用在设备上运行时无法获取 uiautomator 工具中的元素【英文标题】:Unable to get the elements in uiautomator tool when the app is running on the device 【发布时间】:2016-03-25 01:16:03 【问题描述】:我有一个设置,其中我的 PC 中的 Web 应用程序正在访问在连接的设备上运行的应用程序信息。(通过 USB 调试)。并不断将应用数据发送到Web Application(PC)。
我正在使用 selenium(web GUI) 和 appium(device) 进行自动化测试。
问题:一旦应用程序在设备中启动并与 Web 应用程序(在我的 PC 中)通信,我无法从 uiautomator.bat 工具连接到设备。 得到以下错误。是否有解决此问题的方法。
--------uiautomator.bat 日志-----------
C:\Users\sat_yug\android-sdks\tools>uiautomatorviewer.bat 03:57:35 E/DeviceMonitor: Adb connection Error: 现有连接被远程主机强行关闭 03:57:36 E/DeviceMonitor:连接尝试:1 03:57:38 E/DeviceMonitor:连接尝试:2 03:57:40 E/DeviceMonitor:连接尝试:3 03:57:42 E/DeviceMonitor:连接尝试:4 03:57:44 E/DeviceMonitor:连接尝试:5 03:58:04 E/DeviceMonitor: Adb connection Error: 现有连接被远程主机强行关闭
------------adb 设备日志------------
C:\Users\sat_yug\android-sdks\platform-tools>adb 设备 附加设备列表 adb 服务器已过期。杀... 错误:无法安装 smartsocket 侦听器:无法绑定到 127.0.0.1:5037:每个套接字地址只能使用一次(协议/n 网络地址/端口)通常是允许的。 (10048) 无法从 ADB 服务器读取 ok * 无法启动守护进程 * 错误:无法连接到守护进程
【问题讨论】:
也在这里添加你的 bat 文件的内容 【参考方案1】:我刚刚为我解决了这个问题,所以我想我会分享,即使这个问题很老了。简单地重新启动 adb 是行不通的。打开具有管理员权限的命令提示符并执行以下命令:
netstat -o -n -a | findstr 5037
这将产生一个结果列表。这就是我的情况:
TCP 127.0.0.1:5037 0.0.0.0:0 LISTENING 3408
TCP 127.0.0.1:5037 127.0.0.1:50018 ESTABLISHED 3408
TCP 127.0.0.1:5037 127.0.0.1:54507 ESTABLISHED 3408
TCP 127.0.0.1:5037 127.0.0.1:63330 ESTABLISHED 3408
TCP 127.0.0.1:5037 127.0.0.1:63332 ESTABLISHED 3408
TCP 127.0.0.1:50018 127.0.0.1:5037 ESTABLISHED 1664
TCP 127.0.0.1:54507 127.0.0.1:5037 ESTABLISHED 1664
TCP 127.0.0.1:63330 127.0.0.1:5037 ESTABLISHED 1664
TCP 127.0.0.1:63332 127.0.0.1:5037 ESTABLISHED 1664
最右边的列是进程 ID (PID)。正在监听所需套接字的进程是3408。所以这个进程必须DIE
!如果你这样做会发生什么:
taskkill /F /PID 3408
之后就可以了
adb kill-server
adb start-server
重启 adb 服务器,你的 adb 很可能会成功启动。
更新:
我制作了这个小 bat 文件以使其更容易,因为这种情况经常发生。确定
1. to place this bat at the same folder as adb.exe
2. run it as administrator.
它将直接显示正在使用套接字的 PID。键入该 PID 并按 Enter 键,问题就消失了。
netstat -o -n -a | findstr 5037 | findstr LISTENING
set /p pid=Enter pid to kill:%=%
@echo %pid%
taskkill /F /PID %pid%
adb kill-server
adb start-server
pause
【讨论】:
【参考方案2】:根据THIS 问题的答案,您可能安装了两个版本的 adb。
尝试以下方法(引用自同一篇文章以检查是否有多个版本)并删除不需要的版本。
adb.exe 在哪里
您可以尝试的另一个选项是在错误点之前或在批处理文件开始执行时终止并启动 adb 服务器。
adb kill-server
adb start-server
....
....
//your script here
....
....
【讨论】:
【参考方案3】:我遇到了同样的问题。解决方案:
从 1 台机器登录 adb shell 并运行
adb start-server
现在尝试从其他机器连接到同一设备,您将能够成功连接!
在我的例子中,两个连接是通过:USB 和 wifi。
【讨论】:
以上是关于应用在设备上运行时无法获取 uiautomator 工具中的元素的主要内容,如果未能解决你的问题,请参考以下文章
python-appium提示无法定位元素,添加uiautomator2后运行报错
使用uiautomator2 对Android设备进行UI自动化/压测