0

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

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

4

1 回答 1

3

这是很有可能的。这是你如何做到的。

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

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

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

{
    "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);

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

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

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

我创建了一篇关于这件事的详细博客文章。您可以在此处参考以获取更多详细信息。

于 2018-01-10T04:14:30.353 回答