我正在设置一个 Selenium 网格,以便涵盖一个测试矩阵,该矩阵需要全面涵盖以下组合:提供相同服务的三台服务器(Windows Server 2003、2008 和 2012)和十个客户端(XP、Win7、 win8 和 win8.1)将访问三台服务器中的每台服务器以执行几乎相同的测试。三台服务器部分很可能与这个问题无关,但我出于上下文原因将其放入其中。我正在通过 TestNG DataProviders 配置要使用的服务器。
问题是我不仅想测试不同浏览器、浏览器版本和操作系统之间的交互,还想测试所有四个版本的 Windows 之间的交互。
据我所知,DesiredCapability 类只允许我在 XP、VISTA 和 WINDOWS 枚举之间进行指定。我发现了这个问题并且已经得到解答Selenium Grid:功能和平台.WINDOWS7?
然而,出于三个原因,我想发布一个新问题。它涉及旧版本的selenium。我使用的是 2.39.0,解决方案引用版本 2.15。另外,我有四个 Windows 平台,因此我无法使用建议的解决方案,除非我删除了部分测试矩阵。这是不可取的,但并非不可能。最后,虽然我对所使用的技巧有很好的理解,但我对覆盖枚举如何影响我的测试的理解是相当未知的。
我想到的一种可能的解决方法取决于枚举的使用方式。如果它只是使用枚举来搜索所有节点以查找已设置了某些指定功能的机器,我可以将任何剩余的平台标志分配给我的第四个操作系统配置文件。例如,将 XP 标志分配给 winXP,将 WINDOWS 标志分配给 win7,将 VISTA 分配给 win8,最后将 UNIX 标志分配给 win8.1。但如果枚举用于更强烈的目的,我就陷入了众所周知的困境。另外,使用 UNIX 平台标志定义 Windows 盒子似乎是一种糟糕的编程习惯,即使它工作得很好。
我想我真正想要的是告诉网格“在具有此 IP 地址的计算机上运行此测试”,而不是“在匹配这些功能的计算机上运行此测试”。此功能是否已添加到 selenium 中,或者是否有我缺少的解决方法?
Thanks,
Jon
您可以在节点计算机上的节点配置 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 网格会对这些值进行简单的字符串匹配。请参阅以下有关使用现有功能来识别特定节点的谷歌小组讨论:
使用applicationName能力
使用Browser Version能力
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)