16

所以我正在尝试创建一个使用 Selenium 来自动化 WebDriver 以在网站上执行任务的 java 程序。目前,我正在使用它来完成一项烦人的任务,即用户必须将文件上传到我们的数据库。我已经成功地制作了一个自动执行此操作的程序,并为自己节省了数小时的手动工作。

现在我试图让程序并行运行多个浏览器。我想这样做是为了加快上传文件的速度,因为大部分时间都在等待页面加载。

我已经用我的程序的一个更简单的版本对此进行了测试,并通过使用自己的 WebDrivers 打开数十到数百个线程,成功地将简单任务加速了 2-10 倍。

问题是,每当我运行超过1 个WebDriver 时,整个事情有时会开始随机崩溃,而在其他时候根本不起作用。我尝试将'PhantomJSDriver'与最新的 ' PhantomJS.exe' 一起使用,但有时它会起作用,而且大多数时候它什么也不做。一个驱动程序运行时完美运行的同一程序在并行运行时会崩溃。

我一直在努力寻找发生这种情况的原因以及解决方法,但我还没有找到任何可以使用的明确信息。

如果可能的话,我怎样才能与 Selenium 并行自动浏览网页,如果没有,我应该在哪里寻找才能做到这一点?

4

6 回答 6

4

这就是你所需要的,它被称为“Selenium Grid”

http://selenium-grid.seleniumhq.org/

于 2013-06-26T01:05:30.447 回答
2

实际上,Grid您可以使用同一台机器或使用多台机器(这里的机器是指单台计算机)并行自动化测试。

我希望此链接将向您展示如何在同一台机器上并行运行测试

在上面给出的链接中,用户说要创建五个不同的程序来并行运行。如果要并行运行单个程序,则只需使用TestNg or Junit触发多个实例。

这是TestNg config code并行运行测试的示例。在这里,我运行了两个线程。因此它将在两个线程中调用@Test给定类文件的 TestNg 方法。com.test.workflow.device.testcase20

  <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
 <suite name="Suite1"  parallel="test" thread-count="2">
   <test name="Testcase20" >
    <classes>
        <class name="com.test.workflow.device.testcase20"/>
    </classes>
  </test>
 </suite>

通过使用上面的 xml 文件,您可以使用网格在 webdriver 中实现并行性。

于 2013-06-26T09:57:46.887 回答
0

你可以试试 Sahi http://sahi.co.in/。它可以并行运行多个浏览器实例。

看看 Sahi 是如何上传文件的。http://sahi.co.in/w/_setFile

于 2013-06-28T08:08:16.573 回答
0

可以同时运行 selenium 实例。当 selenium 运行浏览器实例时,它默认打开端口7055上的连接。

所以,如果你想运行多个实例,你必须在不同的端口上运行它们。

于 2014-08-20T15:14:10.637 回答
0

我建议您为每个浏览器构建一个驱动程序,并让您的代码知道您使用多个驱动程序。如上所述的其他建议,使用 Selenium Grid 是可用的最佳解决方案: https ://sqa.stackexchange.com/questions/5431/how-to-open-multiple-browsers-using-webdriver https://github.com /SeleniumHQ/selenium/wiki/Grid2

于 2015-04-09T07:03:00.243 回答
0

如果您使用 webdriver ,请尝试 maven-surefire-plugin :

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.19</version>
        <configuration>
            <forkCount>4</forkCount>
        </configuration>
    </plugin>
</plugins>

在代码中使用选项“forkCount”值 4 - 处理器数。4 个处理器 = 4 个 JVM。你可以为每个 JVM 启动 webdriver !链接信息http://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html

于 2016-01-15T11:34:37.420 回答