Selenium Grid:org.openqa.selenium.WebDriverException:转发新会话时出错用于设置功能的 VM 空池

Selenium Grid: org.openqa.selenium.WebDriverException: Error forwarding the new session Empty pool of VM for setup Capabilities

我正在使用 Cucumber 在 selenium 网格上尝试 POC。我收到此错误: 转发新会话时出错用于设置功能的 VM 空池

这是我的示例代码:

public static void configureServer() {

    GridHubConfiguration gridHubConfig = new GridHubConfiguration();
    //gridHubConfig.role = "hub";
    gridHubConfig.host = "127.0.0.1";
    gridHubConfig.port = 4444;
    gridHubConfig.newSessionWaitTimeout = 150000;
    Hub myHub = new Hub(gridHubConfig);
    myHub.start();

    GridNodeConfiguration gridNodeConfig = new GridNodeConfiguration();
    gridNodeConfig.hub = "http://127.0.0.1:4444/grid/register";
    gridNodeConfig.host = "xxxx"; //my ip address
    gridNodeConfig.port = 5566;
    gridNodeConfig.role = "webdriver";
    RegistrationRequest req = RegistrationRequest.build(gridNodeConfig);
    req.getConfiguration();
    req.validate();
    RegistrationRequest.build(gridNodeConfig);

    SelfRegisteringRemote remote = new SelfRegisteringRemote(req);
    remote.setRemoteServer(new SeleniumServer(gridNodeConfig));
    remote.startRemoteServer();
    remote.startRegistrationProcess();

    System.out.println("Node Registered to Hub..............");
}

能力:

        capabilities.setBrowserName("chrome");
        capabilities.setPlatform(Platform.MOJAVE);
        capabilities.setVersion("91.0.4472.114");
        capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);

驱动程序初始化:

            HubNodeConfiguration.configureServer();
            System.setProperty("webdriver.chrome.driver","xxx/chromedriver");
            threadLocalDriver.set(new RemoteWebDriver(new URL("http://localhost:9090 
            /wd/hub"),capabilities));
             

已尝试并遵循此处提供的答案 (Selenium Grid +Error forwarding the new session Empty pool of VM for setup Capabilities),但没有成功

详细代码请参考我的Git Repo : https://github.com/rkhanna1401/cucumber_selenium_grid

您的代码存在多个问题。简而言之,您仅在用于创建 WebDriver 的 Desired Capabilities 对象中对许多 OS 平台信息进行硬编码,但 Grid Hub 没有这些更改。

我还注意到您的代码库正在尝试与不同端口中的集线器 运行 通信,但您的集线器 运行 在不同的端口中。

我还注意到您的测试代码没有等待节点注册到集线器。我已经快速添加了一个睡眠来促进这一点,但是您可以使用复杂的机制,例如轮询集线器以查看节点是否已注册等,

您需要创建一个具有以下 git 差异内容的补丁文件,然后您可以将其应用到您的代码库中。

这是一个 git 差异,您可以将其应用于您的项目以解决问题

From 7d718cea160e7feac2fab8526f8578553d697426 Mon Sep 17 00:00:00 2001
From: Krishnan Mahadevan <Krishnan.Mahadevan>
Date: Sat, 26 Jun 2021 19:46:33 +0530
Subject: [PATCH] Changes needed

---
 .../java/WebdriverBase/GridDriverManager.java     | 15 +++++----------
 .../java/WebdriverBase/HubNodeConfiguration.java  | 12 +++++++++---
 2 files changed, 14 insertions(+), 13 deletions(-)

diff --git a/src/main/java/WebdriverBase/GridDriverManager.java b/src/main/java/WebdriverBase/GridDriverManager.java
index 58a8052..4102ac3 100644
--- a/src/main/java/WebdriverBase/GridDriverManager.java
+++ b/src/main/java/WebdriverBase/GridDriverManager.java
@@ -96,7 +96,7 @@ public class GridDriverManager {
        }
        if (browserType.equalsIgnoreCase("Chrome")) {
            try {
-               System.setProperty("webdriver.chrome.driver","/Users/rishikhanna/Documents/cucumber/shopping/Driver/chromedriver");
+//             System.setProperty("webdriver.chrome.driver","/Users/rishikhanna/Documents/cucumber/shopping/Driver/chromedriver");
            } catch (Exception e) {
                e.printStackTrace();
            }
@@ -112,9 +112,8 @@ public class GridDriverManager {
 //            chromePrefs.put("profile.default_content_settings.popups", 0);
 //            ChromeOptions options = new ChromeOptions();
 //            options.setExperimentalOption("prefs", chromePrefs);
-            capabilities.setBrowserName("chrome");
-            capabilities.setPlatform(Platform.MOJAVE);
-            capabilities.setVersion("91.0.4472.114");
+
+            capabilities.merge(DesiredCapabilities.chrome());
             capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
           //  capabilities.setCapability(ChromeOptions.CAPABILITY, options);
        }
@@ -130,9 +129,6 @@ public class GridDriverManager {
        if (platformType.equalsIgnoreCase("WINDOWS")) {
            capabilities.setPlatform(Platform.WINDOWS);
        }
-       if (platformType.equalsIgnoreCase("MAC")) {
-           capabilities.setPlatform(Platform.MOJAVE);
-       }
 
        //capabilities.setVersion(getValFromJson(jsonObject,"version"));
        return capabilities;
@@ -149,7 +145,7 @@ public class GridDriverManager {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
-       setDriver("chrome", "WINDOWS");
+       setDriver("chrome", "MAC");
        return threadLocalDriver.get();
    }
 
@@ -159,8 +155,7 @@ public class GridDriverManager {
        {
            try {
                HubNodeConfiguration.configureServer();
-               System.setProperty("webdriver.chrome.driver","/Users/rishikhanna/Documents/cucumber/shopping/Driver/chromedriver");
-               threadLocalDriver.set(new RemoteWebDriver(new URL("http://localhost:9090/wd/hub"),capabilities));
+               threadLocalDriver.set(new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"),capabilities));
                threadLocalDriver.get().manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
            } catch (MalformedURLException e) {
                e.printStackTrace();
diff --git a/src/main/java/WebdriverBase/HubNodeConfiguration.java b/src/main/java/WebdriverBase/HubNodeConfiguration.java
index 174b216..2725bba 100644
--- a/src/main/java/WebdriverBase/HubNodeConfiguration.java
+++ b/src/main/java/WebdriverBase/HubNodeConfiguration.java
@@ -4,6 +4,7 @@ import java.io.File;
 import java.net.MalformedURLException;
 import java.net.URL;
 
+import java.util.concurrent.TimeUnit;
 import org.openqa.grid.common.GridRole;
 import org.openqa.grid.common.RegistrationRequest;
 import org.openqa.grid.internal.utils.SelfRegisteringRemote;
@@ -30,10 +31,10 @@ public class HubNodeConfiguration {
        myHub.start();
 
        GridNodeConfiguration gridNodeConfig = new GridNodeConfiguration();
-       gridNodeConfig.hub = "http://127.0.0.1:4444/grid/register";
-       gridNodeConfig.host = "xxxx"; //my ip address
+       gridNodeConfig.hub = "http://localhost:4444";
+       gridNodeConfig.host = "localhost"; //my ip address
        gridNodeConfig.port = 5566;
-       gridNodeConfig.role = "webdriver";
+       gridNodeConfig.role = "node";
        RegistrationRequest req = RegistrationRequest.build(gridNodeConfig);
        req.getConfiguration();
        req.validate();
@@ -44,6 +45,11 @@ public class HubNodeConfiguration {
        remote.startRemoteServer();
        remote.startRegistrationProcess();
 
+       try {
+           TimeUnit.SECONDS.sleep(10);
+       } catch (InterruptedException e) {
+           e.printStackTrace();
+       }
        System.out.println("Node Registered to Hub..............");
    }
 }
-- 
2.24.3 (Apple Git-128)+GitX