Selenium 屏幕截图如何处理在 Grid 上运行的多个实例?假设我有一个 Grid Hub 驱动一个 Grid Node,同时在一台 Node 机器上运行 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));

关于selenium - Selenium 屏幕截图如何在 Grid 上使用多个实例处理?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18552616/

10-12 16:40