使用Selenium截取屏幕截图

时间:2013-11-14 03:06:10

标签: java selenium

所以我试图用selenium截取当前页面的截图。

我见过代码的例子,例如

File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(scrFile, new File("location"));

但这仅在将驱动程序声明为 FirefoxDriver

时才有效
FirefoxDriver driver = new FirefoxDriver();

对于我的程序,我需要使用 HtmlUnitDriver

HtmlUnitDriver driver = new HtmlUnitDriver();

因为我想拥有无头浏览器,因为FireFoxDriver会打开firefox然后执行所有操作。

无论如何我可以使用HtmlUniteDriver截取屏幕截图,或者无论如何我可以使用另一个,但没有浏览器显示,所以它是无头的。

2 个答案:

答案 0 :(得分:1)

您可以做的一件事是创建自己的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);
  }
}

然后你可以这样做:

HtmlUnitDriver driver = new ExtendedHtmlUnitDriver();
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(scrFile, new File("location"));

此代码不完整,但应足以显示去处。

答案 1 :(得分:1)

虽然我自己还没有机会尝试使用此代码,但我确实找到了HtmlUnitDriver的实现,为您实现了截屏界面:

https://groups.google.com/forum/#!msg/selenium-developers/PTR_j4xLVRM/k2yVq01Fa7oJ

要为此代码添加更多功能,它允许您像通常使用其他WebDrivers(如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"));

希望这会有所帮助!