我在Windows机器上运行Appium 24/7来执行自动化测试。我在一个带有Android 10的仿真器上通过AVD运行这些测试。对于我的测试,我给出了正确的功能并在功能上运行出色。但经过几个小时/天之后,我得到了以下错误:
UnknownError: An unknown server-side error occurred while processing the command. Original error:*Cannot find any free port in range 8200..8299}. Please set the available port number by providing the systemPort capability or double check the processes that are locking ports within this range and terminate these which are not needed anymore at getResponseForW3CError at asyncHandler.
在执行我的代码时,我确保try
中的try
执行AppiumDriverLocalService.stop();
方法来杀死Appium。我的感觉是,这在某种程度上并没有释放UIAutomator2的任何端口(您可以配置这些端口,但我还没有通过systemPort
功能进行配置)。
} finally {
driver.closeApp();
service.stopServer();
System.exit(0);
}
为什么在停止服务后,Appium不释放范围为8000-8299的UIAutomator2端口?
我知道关于adb命令adb -s $UDID forward --remove-all
,但这解决了真正的问题,我不想每次都执行
更新-Fix2-3
我已经通过更改finally
子句来执行以下方法来解决这个问题:
} finally {
AndroidDriver.quit();
AppiumDriverLocalService.stopServer();
为了释放端口8200.8299,必须退出AndroidDriver,因为UIAutomator2是与此链接的。AppiumDriverLocalService将杀死/转发/释放此端口和UIAutomator2,之后我可以自由地停止服务器:
[ADB] Removing forwarded port socket connection: 8203
发布于 2021-03-01 06:17:18
这个问题是你问题的一个很好的例子。正如你所看到的,Appium团队正在关闭它,因为它不是一个Bug。
原因很明显: Appium不负责管理端口,它依赖于您的系统在所需的范围内(根据Appium代码)有一些免费的。
systemPort
用于连接到appium-uiAutomator2-服务器,默认为8200。基本上,Appium为appium-uiAutomator2-服务器从8200到8299之间选择一个端口。但是,在并行运行测试时,必须调整端口以避免冲突。如果没有,那么在99%的默认情况下,您应该是安全的。
重新启动系统(假设它将清除端口)并运行测试。在关闭会话时检查Appium服务器日志中的任何错误。这可能是因为该问题与亚行设置或权限问题有关,而且UI2服务器没有正确停止。
如果是这样,端口仍在使用中。也不是Appium来处理清理的问题。我不确定你提到的亚行命令是否是一个很好的100%保证的方法。我只想添加一个shell脚本,在Appium服务器开始清理8200-8299范围内的端口之前执行该脚本,然后忘记这个问题。
https://stackoverflow.com/questions/66422013
复制相似问题