如何使用Selenium WebDriver打开太多浏览器?

时间:2012-05-27 05:03:43

标签: webdriver selenium-webdriver testng

我需要一次打开50到100个网址,并验证每个网址的登录信息。所有网址都属于Same App,但托管给不同的客户?我如何使用Selenium WebDriver打开多个浏览器,比如20到50个具有不同URL的浏览器?我尝试使用Parallel属性设置为“Tests”并在@BeforeTest中实例化驱动程序对象,但在打开2个浏览器获取selenium异常后,浏览器关闭或第3个浏览器死亡。

下面找到此代码。

@Test
@Parameters({ "url" })
public void testParallel(String url) throws Exception {

    try {
        driver.get(url);

        int i = 0;
        i++;
        System.out.println("Browser Count" + i);

    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

3 个答案:

答案 0 :(得分:3)

我认为使用Java绑定在同一台机器上并行使用多个IEDriver实例是不可能的。 (记得在某处阅读.. .NET绑定支持并行IE实例)

根据IEDriver的官方文档,“与其他WebDriver类不同,对于某些语言绑定,一次只能有一个InternetExplorerDriver实例。如果您需要一次运行多个InternetExplorerDriver实例,请考虑使用RemoteWebDriver和虚拟机。“请参阅here

如果您的testng xml正确,这应该适用于FirefoxDriver。或者如果你想在IE上使用它,那么你应该考虑在不同的机器上设置一个网格并启动IE节点,以便可以进行并行运行。

答案 1 :(得分:0)

为什么你需要一次打开它们? Selenium不适用于负载测试。如果您想检查应用程序或服务器在负载下的运行情况,最好查看JMeter

答案 2 :(得分:0)

对于这样的测试,我建议不要使用浏览器本身,而是使用HTMLUnit驱动程序(就像无头浏览器)。此外,还有一个名为GhostDriver的东西也可能完成类似的东西。不过,你应该使用一个远程网格节点+集线器,但你不需要为了实现目标。

Selenium可以在这方面进行负载测试。另外,我不会使用TestNG:相反,我会使用Gradle或Maven,因为它们本身具有JUnit forking-multithread功能。在Gradle或Maven中,创建一个过滤和标识某个测试类的任务,然后分叉进程以多线程运行它们。 I created an example here.