2014-01-20 63 views
5

我们使用Cucumber-JVM来编写我们的验收测试和JUnit来执行它们(通过JUnit黄瓜跑步者)。由于这些测试涉及Selenium WebDriver,因此如果我的测试失败(我有代码),我希望能够截取屏幕截图。java - JUnit上的黄瓜测试失败钩子

如果我只是添加WebDriver onException钩子,当断言失败时,屏幕截图不会被采用。我希望能够将一个JUnit执行监听器添加到Cucumber运行器,但是API似乎不支持此操作(Cucumber.class上没有addListener方法)。

任何人都可以帮忙吗?感谢团队。

+0

您还可以检出QMetry自动化框架,你不需要做网页/移动自动化所需的所有常见的东西。它由自己的框架照顾它https://qmetry.github.io/qaf/qaf-2.1.9/gherkin_client.html#benefits-of-using-qaf-gherkin-scenario-factory – user861594

+0

是[QAF]( https://qmetry.github.io/qaf)为网页和移动自动化需求提供了内置功能。例如,它具有自动捕获断言/验证或测试失败的截图功能,可根据需要使用属性进行配置。 – 2016-10-20 05:54:57

回答

7

我通常会在@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(); 
     } 
    } 
+0

谢谢你,奇妙的作品。是否有可能在Before/After方法中获得方案的标题或步骤?我想在截图中有一个可读的标题。 – Smoke

+0

不知道,为什么你想这样做。 Cucumber html报告包含标题,标签,Gs,Ws,Ts和屏幕截图信息。场景对象无法检索步骤或标题。它只包含有关标签的信息'''scenario.getSourceTagNames()''' – nilesh

+1

对不起,我是一个总Cucks noob:我从那以后就发现了如何在场景报告中嵌入数据。感谢所有的帮助。 :) – Smoke

0

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