有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用SeleniumWebDriver捕获弹出窗口的屏幕?

我试图捕获弹出窗口的屏幕,但没有成功

我将此代码用于“常规”捕获屏幕:

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. # 1 楼答案

    目前这是不可能的。Webdriver的屏幕截图例程仅适用于DOM;但是该警报存在于DOM之外,它是一个单独的窗口,屏幕截图例程无法包含它

    在Selenium的问题跟踪程序中,问题已被报告并标记为按预期工作:https://code.google.com/p/selenium/issues/detail?id=4412

  2. # 2 楼答案

    无法使用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();