0

所以我总是使用 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​​ 测试单元,或者可能是我做错了。

有人可以给我一些示例代码吗?谢谢

4

3 回答 3

0

知道了!!需要使用救援。感谢您的回复。

begin
    assert(@driver.find_element(:tag_name => "body").text.include?("text to check"),"the assert works")
rescue Test::Unit::AssertionFailedError
    @verification_errors << $!
end
于 2012-04-09T14:47:46.400 回答
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?
于 2013-04-14T04:49:32.877 回答
0

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

我建议你重新实现你的代码并给它一个“nil guard”:

body_element = @driver.find_element(:tag_name => "body")
if body_element
  assert(body_element.text.include?("administration tasks"),"the assert works")
end 
于 2012-04-06T22:45:34.757 回答