如何在ruby测试单元中使用验证

时间:2012-04-06 22:04:26

标签: ruby unit-testing selenium webdriver

所以我总是用perl编写脚本 但是尝试使用Ruby,所以这个问题可能听起来很愚蠢,但生病了。

我正在ruby Test :: Unit中编写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

但是验证对于ruby测试单元不起作用,或者可能是我做错了。

有人可以指点一些示例代码吗? 感谢

3 个答案:

答案 0 :(得分:0)

我没有听说Ruby有“验证”功能,类似于perl,因为“assert”意味着,如果为false,程序会立即停止。

我建议你重新实现你的代码并给它一个“无保护”:

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

答案 1 :(得分:0)

得到了!! 人们需要使用救援。 谢谢回复。

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

答案 2 :(得分: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?