0

我正在设置一个 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 平台,所以除非我删除部分测试矩阵,否则我不能使用建议的解决方案。这是不可取的,但并非不可能。最后,虽然我对所使用的技巧有一个不错的理解,但我对覆盖枚举可能如何影响我的测试的理解是非常未知的。

我想到的一种可能的解决方法取决于枚举的使用方式。如果它只是使用枚举来搜索所有节点以查找已设置具有某些指定功能的机器,我可以将任何剩余的平台标志分配给我的第四个操作系统配置文件。例如,将 XP 标志分配给 winXP,将 WINDOWS 标志分配给 win7,VISTA 分配给 win8,最后将 UNIX 标志分配给 win8.1。但是,如果将枚举用于更强烈的目的,那么我就在众所周知的小溪上。此外,使用 UNIX 平台标志定义一个 windows 框似乎是一种不好的编程习惯,即使它工作得很好。

我想我真正想要的是告诉网格“在具有此 IP 地址的机器上运行此测试”而不是“在与这些功能匹配的机器上运行此测试”。是否已将此功能添加到 selenium,或者是否有我缺少的解决方法?

谢谢,

乔恩

4

1 回答 1

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 小组讨论:

使用applicationName能力

使用Browser Version能力

于 2013-12-23T01:08:44.800 回答