在 Selenium 网格中的特定节点上强制自动化

Force automation on particular node in Selenium grid

我们在办公环境中设置了一个用于 Web 自动化的 Selenium 网格,并且出于某些测试目的,在某些情况下,用户可能希望强制自动化发生在 Chrome 浏览器上的节点 3 上4 个活动节点。稍后,用户可以决定改天在节点 2 上强制执行 Chrome 自动化。

有没有办法强制发生这种情况?我正在研究 nodeconfig.json 文件格式,但我一直无法找到可以帮助我为节点提供唯一标识的参数。

这很有可能。这是您的操作方法。

首先,您需要通过节点配置向节点添加标签。

有关此节点配置的模板,您可以参考 selenium 代码库中的模板 here

所以这是一个包含标签的示例节点配置文件:

{
    "capabilities": [
        {
            "browserName": "chrome",
            "applicationName":"hercules",
            "maxInstances": 10,
            "seleniumProtocol": "WebDriver"
        }
    ],
    "proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
    "maxSession": 10
}

所以这里我们在 chrome 浏览器中添加一个标签,并将其称为 "hercules"。这可以是任何东西,但密钥必须始终是 applicationName

现在你通过命令行传入这个节点配置文件来启动一个节点-nodeConfig。有关此的更多详细信息,请参阅我的网格教程 here

您现在可以实例化您的 RemoteWebDriver 实例,如下所示:

DesiredCapabilities caps = DesiredCapabilities.chrome();
String whichNode = System.getProperty("nodeName", "");
if (!whichNode.trim().isEmpty()) {
    caps.setCapability("applicationName", whichNode);
}

RemoteWebDriver driver = new RemoteWebDriver(gridUrl, caps);

如您所见,如果您通过 JVM 参数 -DnodeName 指定了某些内容,我们将设置相同的键,即 applicationName 并传入一个值。如果您没有通过任何测试,测试将使用默认逻辑进行路由。如果您传入应用程序名称,那么它会被路由到与应用程序名称匹配的节点。

以上内容不需要您更改 selenium 网格中的任何内容,您可以按原样使用所有内容。

但是如果您想要更复杂的东西,那么您可以通过构建您自己的自定义功能匹配器来实现,您将在中心端注入它,然后在客户端使用适当的功能(如上面的示例代码)。

我创建了一个关于这件事的详细博客 post。详情可以参考here