如何在selenium webdriver中使用Robot Framework获取屏幕截图

时间:2017-01-31 05:06:44

标签: java selenium selenium-webdriver phantomjs

我正在使用selenium开发java中的自动化项目。当出现故障时,需要截取Web视图的屏幕截图。使用TakesScreenshot并且它在 chrome-driver phantomjs-driver 中都正常工作。

但是当出现警告框时,这会失败。经过一些研究,我了解到如果出现警报,Selenium无法截取屏幕截图。必须先处理警报。在我的屏幕截图中需要警告框的情况下,我可以使用java.awt.Robot

Robot截取我的屏幕截图,如果使用 phantomjs-driver 或者Chrome运行最小化,则无法获取网络视图。但我需要带有警告框的屏幕截图(代表失败情况)。

这个问题还有其他解决办法吗?

1 个答案:

答案 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();

注意:要使用机器人截屏,您的窗口必须可见。