2012-04-06 58 views
0

因此,我總是使用perl 編寫腳本,但嘗試使用Ruby,所以這個問題可能聽起來很愚蠢,但生病了。如何在紅寶石測試單元中使用驗證

我正在寫紅寶石Selenium Webdriver腳本測試::單元 下面是一些示例代碼。

def test_runit 
    @driver.get(@base_url + "/") 
    @driver.find_element(:id, "gbqfq").clear 
    @driver.find_element(:id, "gbqfq").send_keys "selenium" 
    @driver.find_element(:id, "gbqfb").click 
    @driver.find_element(:link, "Selenium - Web Browser Automation").click 
    assert(@driver.find_element(:tag_name => "body").text.include?("administration tasks"),"the assert works") 
    @driver.find_element(:link, "Support").click 
    end 

隨着輸出

ruby runit.rb 
Loaded suite runit 
Started 
. 
Finished in 9.732149 seconds. 

1 tests, 2 assertions, 0 failures, 0 errors 

測試時,我需要檢查,如果文本出現在頁面上。 使用assert工作得很好。 但是,如果它失敗了,那麼測試在那裏和那裏結束,並且不會繼續進行。

在perl我可以像verify這樣的事情,基本上標記爲失敗,繼續前進。

我希望能得到這樣

ruby runit.rb 
Loaded suite runit 
Started 
. 
Finished in 9.732149 seconds. 

1 tests, 1 assertion, 1 failure, 0 errors 

一個結果,但驗證紅寶石測試設備不工作或可能是我做錯了。

有人可以指點一些示例代碼嗎? 謝謝

回答

0

明白了! 需要使用救援。 感謝您回覆。

begin 
    assert(@driver.find_element(:tag_name => "body").text.include?("text to check"),"the assert works") 
rescue Test::Unit::AssertionFailedError 
    @verification_errors << $! 
end 
0

我還沒有聽說Ruby具有類似於perl的「verify」函數,因爲「assert」表示如果爲false,程序立即停止。

我建議你重新實現您的代碼,並給它一個「無後衛」:

body_element = @driver.find_element(:tag_name => "body") 
if body_element 
    assert(body_element.text.include?("administration tasks"),"the assert works") 
end 
+0

該pr oblem是body元素總是存在的,檢查在文本「管理任務」上。但除此之外,該程序停止問題仍然沒有解決,因爲斷言如果失敗將立即停止腳本。 – Amey 2012-04-09 14:14:56

+0

要稍微改變問題的過程,需要做些什麼來更新測試結果中的「失敗」方面? – Amey 2012-04-09 14:15:58

+0

一旦「assert」失敗,測試用例就會停止,這就是單元測試的方式。我認爲 :)。順便說一句,你可以看看「確保」。 – 2012-04-09 22:35:19

0

是的的確的。你需要拯救命令。

但是,您可以輕鬆創建測試助手

def verify 
    $verification_errors = [] if $verification_errors.nil? 
    assert yield 
rescue Test::Unit::AssertionFailedError => afe 
    $verification_errors << afe 
    puts "ERROR: #{afe.message}" 
end 

一個驗證與此類似方法,然後你可以把它像這樣:

verify{ @driver.find_element(:tag_name => "body").text.include?("foobar") } 

在您的測試結束,在拆解過程中,您需要檢查是否有任何驗證錯誤:

assert $verification_errors.empty? or $verification_errors.nil?