所以我正在尝试创建一个使用Selenium自动化WebDriver在网站上执行任务的java程序。目前,我正在使用它进行工作,以便自动执行烦人的任务,用户必须将文件上传到我们的数据库。我已经成功地制作了一个自动化程序,并节省了数小时的手工工作。
现在我正在尝试让程序在 parallel 中运行多个浏览器。我想这样做是为了加快我上传文件的速度,因为大部分时间都在等待页面加载时丢失。
我用一个更简单的程序版本对此进行了测试,并通过使用自己的WebDrivers打开了数十到数百个线程,设法将简单任务加速了2-10倍。
问题在于,每当我运行超过 1 WebDriver时,整个事情就会随机开始随机发生,而在其他时候根本不起作用。我尝试使用'PhantomJSDriver'以及最新的'PhantomJS.exe',但有时它会起作用,而且大多数时候它什么都不做。与一个驱动程序运行完美运行的相同程序在并行运行时会崩溃。
我一直试图找到原因,为什么会发生这种情况以及解决方法,但我还没有发现任何可以使用的确切内容。
如果可能的话,如何与Selenium并行进行自动化网页浏览,如果没有,为了做到这一点,我应该在哪里查看?
答案 0 :(得分:4)
这就是你所需要的,它被称为“Selenium Grid”
答案 1 :(得分:2)
实际上使用Grid
,你可以使用同一台机器或使用多台机器(这里是个人计算机意义上的机器)并行自动化测试。
我希望link will show you how to run a tests in parallel in same machine。
在上面给出的链接中,用户说要创建一个并行运行的五个不同的程序。如果要并行运行单个程序,则只需使用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中实现并行性。
答案 2 :(得分:0)
您可以尝试使用Sahi http://sahi.co.in/。它可以并行运行多个浏览器实例。
看看Sahi如何上传文件。 http://sahi.co.in/w/_setFile
答案 3 :(得分:0)
可以同时运行selenium实例。当selenium运行浏览器实例时,默认情况下会在端口7055上打开连接。
因此,如果要运行多个实例,则必须在不同的端口上运行它们。
答案 4 :(得分:0)
我建议您为每个浏览器构建一个驱动程序,并让您的代码知道您使用的驱动程序多于多个。如上所述的其他建议,使用Selenium Grid是可用的最佳解决方案: https://sqa.stackexchange.com/questions/5431/how-to-open-multiple-browsers-using-webdriver https://github.com/SeleniumHQ/selenium/wiki/Grid2
答案 5 :(得分:0)
如果您使用webdriver,请尝试使用maven-surefire-plugin:
<div class="relative">
<div class="center vertical">Vertical center</div>
</div>
<div class="relative">
<div class="center horizontal">Horizontal center</div>
</div>
<div class="relative">
<div class="center total">Total center</div>
</div>
在代码中使用选项'forkCount'值4 - 处理器数量。 4个处理器= 4个JVM。你可以为每个JVM启动webdriver! 链接信息http://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html