2014-01-20 62 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()截取截圖。