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

时间:2018-01-08 07:50:42

标签: google-chrome nodes selenium-grid node-config

我们的办公环境中有一个Selenium网格设置,用于网络自动化和出于某些测试目的,存在这样的情况:用户可能想要强制自动化发生在4个活动节点中的节点3上的Chrome浏览器上。稍后,用户可以决定在其他日期强制节点2上的Chrome自动化。

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

1 个答案:

答案 0 :(得分:1)

这是非常可能的。这是你如何做到的。

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

有关此节点配置的模板的模板,您可以参考selenium codebase 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);

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

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

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

我创建了一篇关于此内容的详细博文。您可以参考here了解更多详情。