您好我正在使用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
答案 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
}
}
}
}
}
简单传递它扔构造函数