Selenium在失败时拍摄屏幕

时间:2013-07-18 09:09:32

标签: selenium groovy webdriver spock

您好我正在使用selenium和spock编写冒烟测试,我想在测试失败时截取屏幕截图。试试这个:

    public class ScreenshotTestRule implements MethodRule {
    public Statement apply(final Statement statement, final FrameworkMethod frameworkMethod, final Object o) {
        return new Statement() {
            @Override
            public void evaluate() throws Throwable {
                try {
                    statement.evaluate()
                } catch (Throwable t) {
                    captureScreenshot(frameworkMethod.getName().replaceAll(" ", "-"))
                    throw t
                }
            }

            public void captureScreenshot(String fileName) {
                try {
                    new File("target/surefire-reports/").mkdirs()
                    File  screenshot = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE)
                    Files.copy(screenshot, new File("/target/surefire-reports/"+fileName+".png"))
                } catch (Exception e) {
                    print "Error while creating screenshot " + fileName
                    throw new RuntimeException(e)
                }
            }
        }
    }
}

但是我收到了这个错误:

java.lang.RuntimeException: groovy.lang.MissingFieldException: No such field: driver for class: lt.inventi.apollo.system.test.SmokeTest$ScreenshotTestRule

1 个答案:

答案 0 :(得分:0)

    private class ScreenshotTestRule implements MethodRule {

    WebDriver testDriver

    public ScreenshotTestRule(WebDriver driver) {
        this.testDriver = driver
    }

    public Statement apply(final Statement statement, final FrameworkMethod frameworkMethod, final Object o) {
        return new Statement() {
            @Override
            public void evaluate() throws Throwable {
                try {
                    statement.evaluate()
                } catch (Throwable t) {
                    captureScreenshot(frameworkMethod.getName().replaceAll(" ", "-"))
                    throw t
                }
            }

            public void captureScreenshot(String fileName) {
                try {
                    new File("/target/test-screenshots/").mkdirs()
                    File  screenshot = ((TakesScreenshot) testDriver).getScreenshotAs(OutputType.FILE)
                    String imagePath = "target/test-screenshots/" + fileName + "-screenshot.png";
                    Files.copy(screenshot, new File(imagePath))
                } catch (Exception e) {
                    print "Error while creating screenshot " + fileName
                }
            }
        }
    }
}

简单传递它扔构造函数