我们的办公环境中有一个Selenium网格设置,用于网络自动化和出于某些测试目的,存在这样的情况:用户可能想要强制自动化发生在4个活动节点中的节点3上的Chrome浏览器上。稍后,用户可以决定在其他日期强制节点2上的Chrome自动化。
有没有办法强迫这种情况发生?我正在研究nodeconfig.json文件格式&我无法找到一个可以帮助我为节点提供唯一标识的参数。
答案 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了解更多详情。