我正在使用selenium开发java中的自动化项目。当出现故障时,需要截取Web视图的屏幕截图。使用TakesScreenshot
并且它在 chrome-driver 和 phantomjs-driver 中都正常工作。
但是当出现警告框时,这会失败。经过一些研究,我了解到如果出现警报,Selenium无法截取屏幕截图。必须先处理警报。在我的屏幕截图中需要警告框的情况下,我可以使用java.awt.Robot
。
但Robot
截取我的屏幕截图,如果使用 phantomjs-driver 或者Chrome运行最小化,则无法获取网络视图。但我需要带有警告框的屏幕截图(代表失败情况)。
这个问题还有其他解决办法吗?
答案 0 :(得分:0)
如果您真的想要通过警报捕获屏幕,那么有一种方法。将您的代码部分放在try-catch块中进行截屏。如果发现任何警报,它将抛出异常并在catch块中处理它。
代码段:
Alert alert = null;
try {
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(scrFile, new File("screenshot.png"));
} catch (Exception e) {
alert = driver.switchTo().alert();
if(e.getMessage().contains("unexpected alert open:")){
//before taking screenshot, you may wait for some moment to be properly visible
try {
BufferedImage screencapture = new Robot().createScreenCapture((new Rectangle(Toolkit.getDefaultToolkit().getScreenSize())));
File file = new File("screenshot.jpg");
ImageIO.write(screencapture, "png", file);
} catch (AWTException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
alert.accept(); //or you can use dismiss();
注意:要使用机器人截屏,您的窗口必须可见。