所以我试图用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截取屏幕截图,或者无论如何我可以使用另一个,但没有浏览器显示,所以它是无头的。
答案 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"));
希望这会有所帮助!