2014-06-05 70 views
0

我想寫一個簡單的黃瓜步驟,它檢查是否有兩個短語在頁面上,但我的if語句嘗試失敗。下面是步驟我現在有有麻煩告訴ruby/watir webdriver檢查兩個失敗條件

Then(/^I should see a pdf preview of the magazine$/) do 
    @browser.windows.last.use 
    @browser.text.should_not include "Page not found" 

但是,理想情況下,我想一步檢查,看看如果文本「找不到網頁」的存在,如果是這樣測試失敗。如果「未找到頁面」不存在,則檢查文本「禁止」是否存在,如果存在,則通過測試。如果兩個短語都不存在,則通過測試。

我認爲我在哪裏磕磕絆絆,我不知道該如何告訴它,停下來並通過測試。

理想情況下,我想應該是這樣的......

if text "Page not found" visible? 
    fail test 
elseif text "Forbidden" visible? 
    fail test 
else 
    pass test 

但我不知道如何將它放入紅寶石/的Watir-webdriver的代碼

難道我只是要讓它如果測試失敗會拋出異常?如果那麼容易,那麼測試失敗了,還是會通過測試,但給我一個信息,如果兩個短語都不可見,我該如何讓它通過?

回答

1

只要任何斷言失敗(或引發異常),黃瓜步驟將停止並且測試失敗。相反,如果所有斷言都通過(或者沒有例外),則黃瓜步驟將通過。

其結果是,你可以簡單地做:

Then(/^I should see a pdf preview of the magazine$/) do 
    @browser.windows.last.use 
    @browser.text.should_not include "Page not found" # first assertion 
    @browser.text.should_not include "Forbidden" # second assertion 
end 

有了這一步:

  • 在情況下「找不到網頁」顯示,第一個斷言將失敗。因此,該步驟將被標記爲「失敗」(包含消息文本中包含「找不到頁面」)。黃瓜步驟的其餘部分不會執行 - 即第二個斷言不會被測試。
  • 在顯示「Forbidden」的情況下,第一個斷言將通過,Cucumber將繼續執行該行。當第二個斷言運行時,它會失敗並因此導致步驟失敗(消息文本包含「Forbidden」)。
  • 在兩種文本都不存在的情況下,兩個斷言都會通過。由於Cucumber能夠在沒有任何失敗的斷言(或例外)的情況下完成該步驟,該步驟將被標記爲通過。
  • 在顯示兩個文本的情況下,該步驟將失敗,但錯誤消息只會指示第一個失敗 - 即顯示「找不到頁面」。
+0

我知道這比我想做的更容易,但由於某種原因無法弄清楚爲什麼:)謝謝! – Mayshar