2015-05-28 120 views
1

如果我的測試失敗,是否可以採取某種措施? 我有一個測試,使用硒/ fluentlinium來填充文本/點擊按鈕並聲明結果。我希望在測試條件失敗時能夠採取行動。像下面specs2-對測試失敗採取措施

class TestSpecial extends Specification{ 
    "Website should" { 
    "do the right thing" in new WithBrowser(webDriver = WebDriverFactory(FIREFOX)){ 
     browser.$(".xyz1").text("a") 
     browser.$(".xyz2").click() 
     browser.$(".xyz3").getText must equalTo("foo") 

     browser.$(".xyz1").text("b") 
     browser.$(".xyz2").click() 
     browser.$(".xyz3").getText must equalTo("bar") 
    } 
    onFailure 
    { 
     //context remains same, so I can use browser 
     MySnapshotFunction.takeSnapshot(browser) 
    } 
    } 
} 

有沒有一種方法,使失敗的測試扔,這樣我可以在catch塊拍攝快照?

我想一個方法是使用中給出的建議是:

How to do setup/teardown in specs2 when using "in new WithApplication"

創建標記每個測試的失敗啓動前,要求執行的用戶,以紀念我自己的「WithBrowser」自定義實現在測試塊結束時通過的測試。在拆解代碼中的自定義實現需要一個快照。我已經着眼於使用這種方法,但會歡迎任何更好/更簡單的解決方案。

回答

2

您應該能夠使用Around特點:當我執行它在一個失敗的例子,我得到這樣

execute t  // comes from a println in WithBrowser 
take snapshot 
quit browser // comes from a println in Browser 
一絲

import org.specs2.mutable._ 
import org.specs2.execute._ 

trait TakeSnapshot extends org.specs2.mutable.Around { 
    def browser: Browser 

    abstract override def around[R : AsResult](r: =>R) = super.around { 
    val result = AsResult(r) 
    if (!result.isSuccess) { 
     takeSnapshot(browser) 
    } 
    result 
    } 

    def takeSnapshot(browser: Browser) = 
    println("take snapshot") 
    } 
} 

// then 
"do the right thing" in 
    new WithBrowser(webDriver=WebDriverFactory(FIREFOX)) with TakeSnapshot { 
    browser.$(".xyz1").text("a") 
    browser.$(".xyz2").click() 
    browser.$(".xyz3").getText must equalTo("foo") 

    browser.$(".xyz1").text("b") 
    browser.$(".xyz2").click() 
    browser.$(".xyz3").getText must equalTo("bar") 
} 

相關問題