Java 使用Selenium拍摄屏幕截图

Java 使用Selenium拍摄屏幕截图,java,selenium,Java,Selenium,因此,我尝试使用selenium拍摄当前页面的屏幕截图 我看到过这样的代码示例 File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); FileUtils.copyFile(scrFile, new File("location")); 但这仅在驱动程序声明为FirefoxDriver FirefoxDriver driver = new FirefoxDriver(); HtmlUnitDrive

因此,我尝试使用selenium拍摄当前页面的屏幕截图

我看到过这样的代码示例

File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(scrFile, new File("location"));
但这仅在驱动程序声明为FirefoxDriver

FirefoxDriver driver = new FirefoxDriver();
HtmlUnitDriver driver = new HtmlUnitDriver();
对于我的程序,我需要使用HtmlUnitDriver

FirefoxDriver driver = new FirefoxDriver();
HtmlUnitDriver driver = new HtmlUnitDriver();
因为我想要无头浏览器,因为FireFoxDriver打开firefox,然后执行所有操作


我可以使用HtmlUnitDriver截图,也可以使用另一个截图,但不显示浏览器,因此它是无头的。

您可以做的一件事是创建自己的
HtmlUnitDriver
扩展版本,实现
TakesScreenshot
界面

class ExtendedHtmlUnitDriver extends HtmlUnitDriver implements TakesScreenshot {
  @Override
  public <X> X getScreenshotAs(OutputType<X> target) throws WebDriverException {
    final String base64 = execute(DriverCommand.SCREENSHOT).getValue().toString();
    return target.convertFromBase64Png(base64);
  }
}

这段代码还不完整,但应该足以说明要去哪里。

虽然我自己还没有机会尝试这段代码,但我确实找到了这个实现了take screenshot界面的HtmlUnitDriver实现:

为了给这段代码增加一点功能,它允许您调用take screenshot方法,就像您通常对其他Web驱动程序(如FireFox或Chrome)所做的那样,然后将当前html页面以及所有相关css和图像转储到zip存档中

下面是如何从代码中调用此选项:

WebDriver driver = new ScreenCaptureHtmlUnitDriver();
driver.get("http://www.google.com/");
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
// Now you can do whatever you need to do with it, for example copy somewhere
FileUtils.copyFile(scrFile, new File("c:\\tmp\\screenshot.png"));

希望这能多帮点忙

这是我第一次使用Selenium,我还需要向代码中添加什么?。尝试在答案中添加更多解释,以帮助海报和将来查看问题的人(在链接中)。