java - Webdriver 2.28 是否会在出现异常/失败/错误时自动截屏?

标签 java selenium webdriver selenium-webdriver

Webdriver 2.28 是否会在异常/失败/错误时自动截屏?

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

最佳答案

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

  1. 使用 WebDriverEventListener可附加到 EventFiringWebDriver您可以简单地将其包裹在您常用的驱动程序中。这将为底层 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 一起提供)。

关于java - Webdriver 2.28 是否会在出现异常/失败/错误时自动截屏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14691571/

相关文章:

java - 如何在 camera2 API 中触发手动自动对焦?

java - hibernate继承映射single_table与 boolean 类型的属性

javascript - 如何从动态加载的选择框获取数据

Ruby 代码无需实例化或方法调用即可运行

c# - 向 java servlet 提供信息

java - Java 中的 SSL 证书验证

c# - 你如何使用 selenium c# 处理网页上的两个垂直滚动条

python - 通过 Selenium Hub 获取 Chrome 时遇到问题

internet-explorer - 如何在远程机器上设置 IE webdriver

internet-explorer - Selenium 2.0 WebDriver IE8 findelement by xpath 无法评估