无法将命令代理到远程服务器:套接字挂起

Could not proxy command to the remote server: Socket hang up

我是 运行 两个并联的 Android 设备。有时,此错误会自行显示。

selenium.common.exceptions.WebDriverException:
Message: An unknown server-side error occurred while processing the command. 
Original error: Could not proxy command to the remote server. 
Original error: socket hang up

其他人建议更改系统端口。我已经这样做了,但看到的改进非常有限。

其他人也提出了我的功能语法问题。我已经对它们进行了三重检查,认为没有任何问题。

desired_cap_1 ={
    "platformName": "Android",
    "deviceName": "Galaxy A60",
    "platformVersion": "11",
    "app": "appname",
    "appPackage": "apppackage",
    "appActivity": "appactivity",
    "fullReset": "False",
    "noReset": "True",
    "systemPort": 8202

}

desired_cap_2 ={
    "platformName": "Android",
    "deviceName": "Galaxy S7 Edge",
    "platformVersion": "8",
    "app": "appname",
    "appPackage": "apppackage",
    "appActivity": "appactivity",
    "fullReset": "False",
    "noReset": "True",
    "systemPort": 8203
}

其他人在并行测试期间提到了 Appium 中的“拆解”,这是一个我不熟悉的概念,也找不到关于它的文档。

这可能是什么原因造成的?

我亲身体验过,发现在测试前、测试中和测试后,使用正确的方法启动和停止Appium服务器都很重要。您的 Desired Capabilities 似乎很好,这些不会影响 Appium 服务器的启动和停止方式,只会影响您的功能测试的详细信息,如设备和应用程序。如果查看我自己的项目,我有以下执行来正确启动和停止 Appium 服务器:

  1. 检查服务器是否已经 运行 在端口上(你看到如果它已经 运行 我没有启动 Appium 服务器 - 否则这会导致一些问题)
    public boolean checkServerRunning(int port) {
        boolean isServerRunning = false;
        ServerSocket serverSocket;
        try {
            serverSocket = new ServerSocket(port);
            serverSocket.close();
        } catch (IOException e) {
            isServerRunning = true;
        }
        return isServerRunning;
    }

     if (!service.checkServerRunning(port)) {
         service.startServerCustom(url, port, null);
     }
  1. 我把AndroidDriver分配给Appium服务器的URL
driver = new AndroidDriver<>(new URL("http://" + url + ":" + port + "/wd/hub"), cap);

此时,我假设我的 Appium 服务器 运行 正确并且我的 AndroidDriver 实例已耦合

  1. 在我的测试中执行所有交易。

现在是最适合我的拆解部分,因为使用这些步骤我没有遇到 socket hang up 错误:

  1. 调用 AndroidDriver 执行 quit 命令 - 这必须在我测试后始终执行,这样我的 AndroidDriver 就不会在 Appium 服务器的内存中了
driver.quit();
  1. 如果我用脚本启动了服务器,请退出服务器(如果服务器未在脚本本身内启动,则无法停止服务器,因为 service. 实例没有Appium Server 在它的内存中。
 if (serverFlag) service.stopServer();

最后但并非最不重要的一点 并行运行 要求同一台机器上的每个设备都有一个单独的 Appium 实例。如果您对每个实例仔细执行这些步骤 - 每个实例不同 port/AndroidDriver - 服务器将正确处理此问题。