在网格上运行的多个实例如何处理Selenium屏幕截图?假设我有一个网格集线器在一个节点计算机上同时运行3个Firefox浏览器来驱动一个网格节点,那么如何从这3个节点线程中分别获得3个截屏?
例如,请使用此代码段用于单线程测试:
RemoteWebDriver driver;
driver = new RemoteWebDriver(new URL("http://127.1/wd/hub"), DesiredCapabilities
.firefox() );
driver.get( "http://www.google.com/" );
WebDriver augmentedDriver = new Augmenter().augment(driver);
File screenshot = (TakesScreenshot)augmentedDriver.getScreenshotAs(OutputType
.FILE);
System.out.println( "Page title is: " + driver.getTitle() );
System.out.println( "Screenshot is located at: " + screenshot.getAbsolutePath());
assertTrue( "Page did not contain string.", driver.getSource().contains(
"search") );
driver.quit();
首先Selenium/WebDriver/Selenium Grid
,它不会为您处理多线程,它的基础测试框架(TestNG/JUnit/Cucumber
等)将处理它。WebDriver不是线程安全的,如果要并行运行测试,则需要确保代码是线程安全的。
回到您的问题,您编写的代码将覆盖相同的屏幕快照文件。您将需要使用其他名称将文件复制到其他地方。我建议您为屏幕快照文件添加一个时间戳(毫秒精度)作为前缀,然后复制该屏幕快照文件。这样,对于三个不同的浏览器实例,您将拥有三个独特的截屏。过去这对我有用。
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
String file_name = "screenshot_"+ Add system_time with millisecond precision
FileUtils.copyFile(scrFile, new File(file_name));
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句