8

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

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

4

3 回答 3

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);
    
  2. 如果您使用的是 JUnit,请使用@Ruleand TestRule。如果测试因任何原因失败,这将截取屏幕截图。

    @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 提供)中的方法。

于 2013-02-05T20:26:47.760 回答
2

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

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

你也可以使用像修昔底德这样的东西,它可能会在每个动作或错误时截取屏幕截图并将其放入漂亮的报告中。

于 2013-02-05T09:22:44.317 回答
1

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

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

于 2013-02-05T09:22:56.817 回答