如何使用Selenium WebDriver捕获弹出窗口的屏幕?

4

我正在尝试捕获弹出窗口的屏幕,但一直没有成功。

对于“普通”捕获屏幕,我正在使用以下代码:

File scrFile = ((TakesScreenshot)alertDialog).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(scrFile, new File("c:\\tmp\\screenshot.png"));

当弹出窗口出现时,我想捕捉弹出窗口屏幕,我该怎么做?
public void  checkPopup() throws IOException 
  {
   Alert alertDialog = driver.switchTo().alert();
   File scrFile =    ((TakesScreenshot)alertDialog).getScreenshotAs(OutputType.FILE);
   FileUtils.copyFile(scrFile, new File("c:\\tmp\\screenshot.png"));
   String alertText = alertDialog.getText();
  }
2个回答

1
目前无法实现。Webdriver的截图例程仅适用于DOM;但是警报存在于DOM之外,它是一个单独的窗口,截图例程无法包含它。
在Selenium的问题跟踪器中,该问题已被报告并标记为按预期工作:https://code.google.com/p/selenium/issues/detail?id=4412

1
无法使用Selenium在弹出框中进行截图。您需要接受或拒绝弹出框。如果不这样做,就无法捕获屏幕截图。当您未处理弹出框时,会抛出“UnexpectedAlertPresentException”异常。在我的场景中,我接受警报框并对URL进行屏幕截图。
以下是代码片段。
                    Alert alert = driver.switchTo().alert();
                    String alertText = alert.getText();
                    System.out.println("ERROR: (ALERT BOX DETECTED) - ALERT MSG : " + alertText);
                    alert.accept();
                    File outputFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
                    String imageDetails = "C:\\Images";
                    File screenShot = new File(imageDetails).getAbsoluteFile();
                    FileUtils.copyFile(outputFile, screenShot);
                    System.out.println("Screenshot saved: {}" + imageDetails);
                    driver.close();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接