我正在设置Selenium Grid,以涵盖需要全面涵盖以下组合的测试矩阵:提供相同服务的三台服务器(Windows Server 2003,2008和2012)和十台客户端(口味XP) ,win7,win8和win8.1)将访问三个服务器中的每一个以执行几乎相同的测试。三个服务器部分很可能与这个问题无关,但为了上下文,我把它扔了。我正在通过TestNG DataProviders配置要使用的服务器。
问题在于,我想测试不仅在不同浏览器和浏览器版本与操作系统之间的交互,还要测试所有四种版本的Windows。
据我所知,DesiredCapabilities类只允许我在XP,VISTA和WINDOWS枚举之间进行指定。我找到了这个问题,已经回答Selenium Grid: Capabilities and Platform.WINDOWS7?
但是我想发布一个新问题有三个原因。它涉及旧版的硒。我使用的是2.39.0,解决方案引用了2.15版本。此外,我有四个Windows平台,所以我不能使用建议的解决方案,除非我删除我的部分测试矩阵。这是不可取的,但并非不可能。最后,虽然我对所使用的技巧有一个很好的理解,但是我对如何覆盖枚举可能会影响我的测试的理解是非常未知的。
我想到的一种可能的解决方法取决于如何使用枚举。如果它只是使用枚举搜索所有节点来查找已经设置了某些指定功能的机器,我可以将任何剩余的平台标志分配给我的第四个OS配置文件。例如,将XP标志分配给winXP,将WINDOWS标志分配给win7,将VISTA分配给win8,最后将UNIX标志分配给win8.1。但如果枚举用于更强烈的目的,我就会成为众所周知的小溪。此外,使用UNIX平台标志定义一个Windows框似乎是糟糕的编程习惯,即使它工作得很好。
我想我真正想要的是告诉网格“在具有此IP地址的计算机上运行此测试”,而不是“在符合这些功能的计算机上运行此测试”。是否已将此功能添加到selenium中,或者是否存在我缺少的解决方法?
谢谢,
乔恩
答案 0 :(得分:2)
您可以在节点机器上的节点配置json文件中指定IP:
{
"capabilities":
[
{
"platform": "WINDOWS",
"browserName": "firefox",
"maxInstances": 1,
"seleniumProtocol": "WebDriver",
"nodeip": "192.168.0.123"
}
],
"configuration":
{
"proxy":"org.openqa.grid.selenium.proxy.WebDriverRemoteProxy",
"maxSession":1,
"url":"http://192.168.0.99:4444/wd/hub"
}
}
然后请求特定节点:
DesiredCapabilities caps = DesiredCapabilities.firefox();
caps.setCapability("platform", Platform.WINDOWS);
caps.setCapability("nodeip", "192.168.0.123");
RemoteWebDriver driver = new RemoteWebDriver(new URL(hubUrl), caps);
或者,您可以使用applicationName
功能或Browser Version
功能来指定您的IP /自定义值,因为selenium网格会对这些功能进行简单的字符串匹配。请参阅以下google小组讨论,了解如何使用现有功能识别特定节点: