2013-08-01 32 views
2

想問你關於在這樣的項目中失敗的截圖的最佳方式? 我應該在Selenium代碼中,還是在Maven項目中通過某些命令或使用Xvfb? 通過Xvfb使用Firefox無插件。Selenium Webdriver/TestNG/Maven/Xvfb - 截屏失敗?

我在互聯網上看到了幾個需要截圖的課程,但是我錯過了這裏的大圖。 這個班怎麼知道什麼時候截圖? Jenkins如何告訴java測試代碼它失敗了,所以它會拍攝一張照片? 在測試代碼中,我應該參考take screenshot類嗎? 我應該在整個測試中使用try catch嗎? 是不是有一個Jenkins插件會自動保存截圖失敗?

回答

3

我剛剛發現解釋了一個更好的辦法做到這一點的文章:http://darrellgrainger.blogspot.com/2011/02/generating-screen-capture-on-exception.html

它是如何工作的?
實際上,您傳遞了一個自定義的WebDriverEventListener,它具有將在某些事件上調用的函數。其中一個事件是onException()。所以每次WebDriver拋出一個異常時,你都可以編寫代碼來截圖。

我已經看到了三種不同的方法來做到這一點:

  1. 如果你有一個靜態的驅動程序,最簡單的方法是建立一個監聽TestNG中(Overridding TestListenerAdapter),然後取在onTestFailure()方法中截圖。

  2. 我個人的方法是使用硒頁面對象模式,但修改了一下。我創建了一個EnhancedWebElement對象,該對象封裝並擴展了一個普通的WebElement,並且引用了驅動程序。然後在WebElement的每個方法中,我在try/catch和catch中執行調用,然後截取屏幕截圖。我願意分享代碼,但是我不得不修剪掉很多,以便在這裏發佈,所以請告訴我,如果你想看到它。

  3. 或者,您可以圍繞WebElement或驅動程序本身設置代理並讓它捕獲所有內容。我沒有這樣做,但我已經看到它在其他項目上工作。

+0

現在,我如何在Jenkins的報告中包含該屏幕截圖?我應該把詹金斯的目錄放在哪裏?你認爲這應該是一個新問題的主題嗎? –

+0

是的,我會推薦它是一個新問題,因爲我從來沒有使用詹金斯,所以我是錯誤的人問。 –

0

剛剛發現解釋了一個更好的辦法做到這一點的文章:http://darrellgrainger.blogspot.com/2011/02/generating-screen-capture-on-exception.html 大段引用

但這dicision有一些問題。即使您在代碼中嘗試/捕獲一些異常,它也會保存任何異常的屏幕截圖。 我使用該文章的方法。但在我的測試中。xml文件,我添加

`

<listeners> 
    <listener class-name="MyListener" /> 
    </listeners> 

`

而且比我創建

`

public class MyListener implements ITestListener{ 
    //almost all methods i create blank 
    //but implement only onTestFailure 
    // 
    onTestFailure(){ 
     //here i used methods from article ubove 
     // 
    } 
} 

`

和截圖只在情況下完成我的@Test失敗。