【问题标题】:Does Webdriver 2.28 automatically take a screenshot on exception/fail/error?Webdriver 2.28 是否会自动截取异常/失败/错误的屏幕截图?
【发布时间】:2013-02-06 04:49:14
【问题描述】:

Webdriver 2.28 是否会自动截取异常/失败/错误的屏幕截图?

如果有,我在哪里可以找到屏幕截图?哪个目录是默认的?

【问题讨论】:

标签: java selenium webdriver selenium-webdriver


【解决方案1】:

不,它不会自动执行。您可以尝试两种选择:

  1. 使用可附加到EventFiringWebDriverWebDriverEventListener,您可以简单地将其包裹在您常用的驱动程序上。这将为底层WebDriver 抛出的每个Exception 截取屏幕截图,但如果您未通过assertTrue() 检查。

    EventFiringWebDriver driver = new EventFiringWebDriver(new InternetExplorerDriver());
    WebDriverEventListener errorListener = new AbstractWebDriverEventListener() {
        @Override
        public void onException(Throwable throwable, WebDriver driver) {
            takeScreenshot("some name");
        }
    };
    driver.register(errorListener);
    
  2. 如果您使用的是 JUnit,请使用 @RuleTestRule。如果测试因任何原因失败,这将截取屏幕截图。

    @Rule
    public TestRule testWatcher = new TestWatcher() {
        @Override
        public void failed(Throwable t, Description test) {
            takeScreenshot("some name");
        }
    };
    

takeScreenshot() 方法在这两种情况下都是这样的:

public void takeScreenshot(String screenshotName) {
    if (driver instanceof TakesScreenshot) {
        File tempFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
        try {
            FileUtils.copyFile(tempFile, new File("screenshots/" + screenshotName + ".png"));
        } catch (IOException e) {
            // TODO handle exception
        }
    }
}

...FileUtils.copyFile() 方法是 Apache Commons IO(Selenium 也附带)中的方法。

【讨论】:

  • 是否可以不使用上述takeScreenshot方法和Selenium中java.awt.Robot类的createScreenCapture方法进行截图。
  • @Manigandan 当然,您也可以这样创建屏幕截图。缺点是 WebDriver 截取的屏幕截图跨越了整个页面。这意味着如果页面很长并且不适合一个屏幕,WebDriver 仍然会截取整个页面,而 Robot 不会。
  • 我问,我需要不使用以上两种方法截屏。有什么办法吗?
  • @Manigandan 哦,对不起,我不明白。嗯。这两个人有什么问题吗?为什么你/不想使用它们?我不知道任何其他可能性,尽管我确信有一些——我只是从不需要其他任何东西。例如,看这里:stackoverflow.com/questions/2912007/… 和类似的问题。
  • @CodeEnthusiastic 是的,就是这样。第一个解决方案使用EventFiringWebDriver,它是任何其他WebDriver 周围的装饰器,它只能捕获由此引发的异常。我个人将这两种解决方案结合使用——在出现WebDriver 错误时,我截取了屏幕截图。在这些和任何其他(如 NPE)上,我记录了问题。
【解决方案2】:

WebDriver 本身不会截取屏幕截图。但是你猫是这样带的:((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);

然后将屏幕截图保存在您想要的任何位置。

你也可以使用像修昔底德这样的东西,它可以对每个动作或错误进行截图并将其放入漂亮的报告中。

【讨论】:

    【解决方案3】:

    简短的回答是否定的。WebDriver 是一个与浏览器交互的 API。您可以使用它制作屏幕截图,但您应该知道何时执行此操作。所以它不会自动完成,因为 WebDriver 对测试一无所知。

    如果您使用 TestNG 作为测试库,您可以实现侦听器,其方法将在不同的事件(失败、成功或其他)上执行。在这些方法中,您可以实现所需的逻辑(例如,制作屏幕截图)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-28
      • 2013-08-22
      • 1970-01-01
      • 1970-01-01
      • 2013-11-14
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      相关资源
      最近更新 更多