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

Tin*_*ing 7 java selenium webdriver selenium-webdriver

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

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

Pet*_*ček 11

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

  1. 使用WebDriverEventListener可附加到EventFiringWebDriver您可以简单地包裹您的常用司机.这将截取Exception底层引发的每一个屏幕截图WebDriver,但如果您未通过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);
    
    Run Code Online (Sandbox Code Playgroud)
  2. 如果您正在使用JUnit,请使用@RuleTestRule.如果测试因任何原因失败,将截取屏幕截图.

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

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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

...该FileUtils.copyFile()方法是Apache Commons IO 中的方法(也随Selenium一起提供).