所以我正在尝试使用 selenium 截取当前页面的屏幕截图。
我见过这样的代码示例
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(scrFile, new File("location"));
但这仅在驱动程序声明为 FirefoxDriver
时有效FirefoxDriver driver = new FirefoxDriver();
对于我的程序,我需要使用 HtmlUnitDriver
HtmlUnitDriver driver = new HtmlUnitDriver();
因为我想要 headless 浏览器,因为 FireFoxDriver 打开 firefox,然后执行所有操作。
无论如何我都可以使用 HtmlUniteDriver 截取屏幕截图,或者无论如何我可以使用另一个但没有浏览器显示所以它是 headless 的。
最佳答案
您可以做的一件事是创建您自己的 HtmlUnitDriver
扩展版本,它确实实现了 TakesScreenshot
接口(interface)。
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"));
此代码不完整,但应该足以显示去向。
关于java - 使用 Selenium 截图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19968754/