我很惊讶没有找到任何智能解决方案如何使用 Selenium Grid 运行 Selenium webdriver 测试,而是使用多个浏览器运行每个测试。最好我想要某种配置(文件或硬编码),我可以在其中指定我希望我的测试运行的所有浏览器。然后每个测试将在每个浏览器上运行。
我假设可以编写自己的测试运行程序并放置一个循环,遍历所有浏览器的每个测试梯级。但也许有人知道更优雅的解决方案?有人做过吗?
PS 我找到了建议复制测试并为每个测试指定浏览器参数的解决方案。我不想要那个。
我很惊讶没有找到任何智能解决方案如何使用 Selenium Grid 运行 Selenium webdriver 测试,而是使用多个浏览器运行每个测试。最好我想要某种配置(文件或硬编码),我可以在其中指定我希望我的测试运行的所有浏览器。然后每个测试将在每个浏览器上运行。
我假设可以编写自己的测试运行程序并放置一个循环,遍历所有浏览器的每个测试梯级。但也许有人知道更优雅的解决方案?有人做过吗?
PS 我找到了建议复制测试并为每个测试指定浏览器参数的解决方案。我不想要那个。
我不熟悉 Selenium Grid,但我知道您可以通过在不同线程上运行每个测试来让 Selenium 同时打开多个浏览器。你可能想看看这个。
我所做的是在类级别运行我的测试,然后创建一个 TestNG.xml,然后在其中指定我希望运行的类以及它们应该运行的浏览器。所以我的 TestNG 文件看起来像:
<?xml version="1.0" encoding="UTF-8"?>
<suite name = "suite1" verbose = "6" preserve-order="true" parallel = "false" thread-count="1">
<test name = "Any Test">
<parameter name = "browser" value ="chrome">
<parameter name = "port" value = "5555">
</parameter>
</parameter>
<classes>
<class name = "name of class to run"/>
</classes>
</test>
</suite>
然后因为我在 Selenium Grid 上运行,所以我在代码中传递浏览器和端口的参数,如下所示:
@BeforeMethod()
@Parameters({"browser","port"})
public void launchBrowsers(String browser, String port) throws Exception {
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setBrowserName(browser);
capabilities.setJavascriptEnabled(true);
setSelenium(new RemoteWebDriver(new URL("http://localhost:".concat(port).concat("/wd/hub")), capabilities));
getSelenium().get(baseUrl);
getSelenium().manage().window().maximize();
}
希望这可以帮助
我已经解决了这个问题,我为每个 TestNG 套件指定了不同的浏览器参数。