【问题标题】:Trying to automate with Selenium in parallel, but multiple webdriver instances freak out尝试与 Selenium 并行自动化,但多个 webdriver 实例吓坏了
【发布时间】:2016-01-15 19:34:37
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

标签: selenium parallel-processing webdriver phantomjs


【解决方案1】:

这就是你需要的,它叫做“Selenium Grid”

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

【讨论】:

  • 我会调查一下,但这是否允许我在一台机器上运行多个驱动程序?我的目标是从单台机器上的程序并行自动化。我不希望在多台机器上实现自动化(机器指的是实际计算机)
【解决方案2】:

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

我希望这个link will show you how to run a tests in parallel in same machine

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

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

  <!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 中实现并行性。

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

          如果你使用 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

          【讨论】:

            猜你喜欢
            • 2020-02-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-10-07
            • 1970-01-01
            • 2021-05-15
            相关资源
            最近更新 更多