【问题标题】:Selenium take screen on failureSelenium 屏幕出现故障
【发布时间】:2013-07-18 09:09:31
【问题描述】:

您好,我正在使用 selelium 和 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

【问题讨论】:

  • 那么driver 来自哪里?它是在哪里创建的?您确定不想将其实际传递给 captureScreenshot 方法吗?
  • driver 是 SmokeTest 类字段,ScreenShotTestRule 类是内部的,所以我想它应该在这里可见

标签: selenium groovy webdriver spock


【解决方案1】:
    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
                }
            }
        }
    }
}

简单的传递它抛出构造函数

【讨论】:

    猜你喜欢
    • 2014-04-22
    • 1970-01-01
    • 2010-11-16
    • 2022-06-16
    • 2011-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-19
    相关资源
    最近更新 更多