JUnit测试失败钩子上的java-Cucumber

JUnit测试失败钩子上的java-Cucumber,java,unit-testing,selenium,junit,cucumber-jvm,Java,Unit Testing,Selenium,Junit,Cucumber Jvm,我们使用Cucumber JVM编写验收测试脚本,并使用JUnit执行它们(通过JUnit Cucumber runner)。由于这些测试涉及SeleniumWebDriver,我希望能够在测试失败时截图(我有代码) 如果我只是简单地添加一个WebDriver OneException钩子,那么当断言失败时,屏幕截图就不会出现。我希望能够向Cucumber运行程序添加JUnit执行侦听器,但API似乎不支持这一点(Cucumber.class上没有addListener方法) 有人能帮忙吗?感谢

我们使用Cucumber JVM编写验收测试脚本,并使用JUnit执行它们(通过JUnit Cucumber runner)。由于这些测试涉及SeleniumWebDriver,我希望能够在测试失败时截图(我有代码)

如果我只是简单地添加一个WebDriver OneException钩子,那么当断言失败时,屏幕截图就不会出现。我希望能够向Cucumber运行程序添加JUnit执行侦听器,但API似乎不支持这一点(Cucumber.class上没有addListener方法)


有人能帮忙吗?感谢团队。

如果您在Selenium前面使用Geb,我想您可以使用Geb.Browser.report()来截图。

我通常在每次场景后调用的
@After
钩子中截图
@After
hook方法采用一个特殊的
Scenario
对象,以便您可以将屏幕截图嵌入报表中。下面是一个关于如何在场景失败时截图的示例

   @After
    public void tearDown(Scenario scenario) {
        try {
            if (scenario.isFailed()) {
                final byte[] screenshot = ((TakesScreenshot) driver)
                        .getScreenshotAs(OutputType.BYTES);
                scenario.embed(screenshot, "image/png");
            }
        } finally {
            driver.quit();
        }
    }

谢谢,效果很好。是否可以在Before/After方法中获取场景的标题或步骤?我想在我的截图中有一个可读的标题。不确定,你为什么要这样做。Cucumber html报告包含标题、标记、Gs、Ws、Ts和屏幕截图信息。场景对象无法检索步骤或标题。它只有关于标签的信息
scenario.getSourceTagNames()
对不起,我是一个彻头彻尾的笨蛋:我发现了如何在一个scenario报告中嵌入数据。谢谢你的帮助。:)您还可以签出QMetry自动化框架,在该框架中,您不需要执行web/mobile自动化所需的所有常见操作。它由一个框架负责,该框架本身具有针对web和移动自动化需求的内置功能。例如,它具有用于断言/验证或测试失败的自动捕获屏幕截图功能,可以使用属性根据需要进行配置。