当应用程序在设备上运行时,无法获取uiautomator工具中的元素

sat*_*yug 5 sockets usb android automated-tests appium

我有一个设置,我的电脑中的Web应用程序正在访问连接设备上运行的应用程序信息.(通过USB调试).并持续将应用程序数据发送到Web应用程序(PC).

我正在使用selenium(web GUI)和appium(设备)自动执行此操作以进行自动化测试.

问题:一旦应用程序在设备中启动并与Web应用程序通信(在我的PC中),我无法从uiautomator.bat工具连接到设备.得到以下错误.是否有针对此问题的解决方法.

-------- uiautomator.bat日志-----------

C:\ Users\sat_yug\android-sdks\tools> uiautomatorviewer.bat 03:57:35 E/DeviceMonitor:Adb连接错误:现有连接被远程主机强行关闭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连接错误:远程主机强行关闭现有连接

------------ adb devices log ---------------------

C:\ Users\sat_yug\android-sdks\platform-tools> adb devices附加的设备列表adb服务器已过期.kill ...错误:无法安装smartsocket监听器:无法绑定到127.0.0.1:5037:通常只允许使用每个套接字地址(protocol/n \network address/port).(10048)无法从ADB Server读取ok*无法启动守护程序*错误:无法连接到守护程序


Ano*_*ous 11

我刚刚为我解决了这个问题,所以即使问题很老,我还是想分享一下.简单地重新启动adb是行不通的.使用管理员权限打开命令提示符并执行以下命令:

netstat -o -n -a | findstr 5037
Run Code Online (Sandbox Code Playgroud)

这将生成结果列表.这就是我的情况:

 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
Run Code Online (Sandbox Code Playgroud)

最右边的列是进程ID(PID).正在监听所需套接字的进程是3408.所以这个过程必须DIE!如果您这样做,会发生什么:

taskkill /F /PID 3408
Run Code Online (Sandbox Code Playgroud)

之后你就可以做到

adb kill-server
adb start-server
Run Code Online (Sandbox Code Playgroud)

重新启动adb服务器,最有可能的是,您的adb将成功启动.

更新:

我制作了这个小蝙蝠文件,以便更容易,因为这种情况经常发生.确保

1. to place this bat at the same folder as adb.exe 
2. run it as administrator. 
Run Code Online (Sandbox Code Playgroud)

它将直接显示正在使用套接字的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
Run Code Online (Sandbox Code Playgroud)


And*_*tel 1

根据此问题的答案,您可能安装了两个版本的 adb。

尝试以下操作(引用自同一篇文章以检查是否有多个版本)并删除不需要的版本。

adb.exe 在哪里

您可以尝试的另一个选择是在错误点之前或开始执行批处理文件时终止并启动 adb 服务器。

adb kill-server
adb start-server
....
....
//your script here
....
....
Run Code Online (Sandbox Code Playgroud)