【问题标题】:java - Cucumber on JUnit Test Failure Hookjava - JUnit 测试失败挂钩上的 Cucumber
【发布时间】:2014-02-09 05:00:31
【问题描述】:

我们使用 Cucumber-JVM 编写验收测试脚本,并使用 JUnit 执行它们(通过 JUnit Cucumber 运行器)。由于这些测试涉及 Selenium WebDriver,因此如果我的测试失败(我有代码),我希望能够截取屏幕截图。

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

有人可以帮忙吗?感谢团队。

【问题讨论】:

  • 您还可以签出 QMetry 自动化框架,您无需执行 Web/移动自动化所需的所有常见工作。它由它自己的框架处理qmetry.github.io/qaf/qaf-2.1.9/…
  • 是的 QAF 具有满足 Web 和移动自动化需求的内置功能。例如,它具有断言/验证或测试失败的自动捕获屏幕截图功能,可以根据需要使用属性进行配置。

标签: java unit-testing selenium junit cucumber-jvm


【解决方案1】:

如果你在 Selenium 前面使用 Geb,我认为你可以使用 geb.Browser.report() 来截屏。

【讨论】:

    【解决方案2】:

    我通常在 @After 钩子中截屏,该钩子在每个黄瓜场景之后都会被调用。 @After 钩子方法采用特殊的 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() 的信息
    • 抱歉,我完全是库克斯菜鸟:我已经发现了如何在场景报告中嵌入数据。感谢所有的帮助。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 2020-10-19
    • 2015-12-27
    相关资源
    最近更新 更多