我们在我们的办公环境中设置了Selenium网格,用于web自动化&出于某些测试目的,用户可能希望强制在4个活动节点中的节点3上的Chrome浏览器上实现自动化。稍后,用户可以决定在节点2上强制Chrome自动化,也许有一天会这样。
有办法迫使这种情况发生吗?我正在查看nodeconfig.json文件格式&我无法找到一个参数来帮助我向节点提供唯一的标识。
发布于 2018-01-10 04:14:30
这是非常有可能的。这是你怎么做的。
首先,您需要通过节点配置向节点添加标签。
有关此节点配置的模板,可以参考selenium代码库这里中的模板。
下面是一个包含标签的示例节点配置文件:
{
"capabilities": [
{
"browserName": "chrome",
"applicationName":"hercules",
"maxInstances": 10,
"seleniumProtocol": "WebDriver"
}
],
"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
"maxSession": 10
}
因此,在这里,我们添加了一个标签到铬浏览器,并称之为“大力神”。这可以是任何东西,但关键始终必须是applicationName
现在,通过命令行-nodeConfig
传入此节点配置文件来启动节点。有关此问题的详细信息,请参阅我的网格教程这里。
现在实例化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参数applicationName
指定了一些内容,那么我们将设置相同的键,即-DnodeName
,并传入一个值。如果您没有通过任何测试,测试将使用默认逻辑进行路由。如果传入应用程序名称,则会将其路由到与应用程序名称匹配的节点。
以上所述并不要求您更改selenium网格中的任何内容,您可以按原样使用所有内容。
但是,如果您想要更复杂的东西,那么您可以构建自己的自定义功能匹配器,在集线器的末尾注入它,然后在客户端使用适当的功能(如上面的示例代码所示)。
我写了一篇关于这件事的详细博文。有关更多细节,您可以参考这里。
https://stackoverflow.com/questions/48146173
复制相似问题