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

时间:2013-02-04 16:59:28

标签: java selenium webdriver selenium-webdriver

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

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

3 个答案:

答案 0 :(得分:11)

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

  1. 使用WebDriverEventListener可附加到EventFiringWebDriver@Rule,您只需将常规驱动程序包裹起来即可。这将截取基础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);
    
  2. 如果您使用的是JUnit,请使用TestRuleFileUtils.copyFile()。如果测试因任何原因失败,这将截取屏幕截图。

    @Rule
    public TestRule testWatcher = new TestWatcher() {
        @Override
        public void failed(Throwable t, Description test) {
            takeScreenshot("some name");
        }
    };
    
  3. 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
            }
        }
    }
    

    ...其中{{3}}方法是Apache Commons IO中的方法(也是Selenium附带的方法)。

答案 1 :(得分:2)

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

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

此外,你还会使用像修昔底德这样的东西,可能会对每个动作或错误进行截屏,并将其放在漂亮的报告中。

答案 2 :(得分:1)

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

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