我现在正在做的是:
def wait_for(timeout = 5)
Selenium::WebDriver::Wait.new(:timeout => timeout).until { yield }
rescue Selenium::WebDriver::Error::TimeOutError => e
puts 'Timeout Error'
rescue Selenium::WebDriver::Error::NoSuchElementError => ex
puts 'No Such Element Error'
end
两个问题:
1)为什么它显示我超时错误两次?它应该只是超时并结束测试
2)我如何让它不显示底部的所有额外信息?理想情况下,我想要的只是让它说"超时"或"没有这样的元素",就是这样。* *
我的日志吐出了所有这些:
已加载套件C:/2oh/qt Started
第一次运行超时错误超时错误======================================================================================================================================================================================================== 错误:test_18a(测试):
Selenium::WebDriver::Error::NoSuchElementError: no such element(会话信息:chrome=43.0.2357.134)(驱动程序信息:chromedriver=2.15.322448 (52179c1b310fec1797c81ea9a20326839860b7d3),平台=Windows NT 6.1 SP1x86_64)C:/Ruby22/lib/ruby/珠宝/2.2.0/珠宝/selenium-webdriver-2.46.2/lib/硒/webdriver/远程/response.rb: 71:在assert_ok' C:/Ruby22/lib/ruby/gems/2.2.0/gems/selenium-webdriver-2.46.2/lib/selenium/webdriver/remote/response.rb:34:in
初始化的C:/Ruby22/lib/ruby/珠宝/2.2.0/珠宝/selenium-webdriver-2.46.2/lib/硒/webdriver/远程/http/common.rb: 78:在new' C:/Ruby22/lib/ruby/gems/2.2.0/gems/selenium-webdriver-2.46.2/lib/selenium/webdriver/remote/http/common.rb:78:in
create_response"C:/Ruby22/lib/ruby/珠宝/2.2.0/珠宝/selenium-webdriver-2.46.2/lib/硒/webdriver/远程/http/default.rb: 90:在request' C:/Ruby22/lib/ruby/gems/2.2.0/gems/selenium-webdriver-2.46.2/lib/selenium/webdriver/remote/http/common.rb:59:in
称之为"C:/Ruby22/lib/ruby/珠宝/2.2.0/珠宝/selenium-webdriver-2.46.2/lib/硒/webdriver/远程/bridge.rb: 657:在raw_execute' C:/Ruby22/lib/ruby/gems/2.2.0/gems/selenium-webdriver-2.46.2/lib/selenium/webdriver/remote/bridge.rb:635:in
执行"C:/Ruby22/lib/ruby/珠宝/2.2.0/珠宝/selenium-webdriver-2.46.2/lib/硒/webdriver/远程/bridge.rb: 603:在find_element_by' C:/Ruby22/lib/ruby/gems/2.2.0/gems/selenium-webdriver-2.46.2/lib/selenium/webdriver/common/search_context.rb:61:in
find_element' C:/2oh/qttests。[00:28]在test_hdesrbf' C:/2oh/qt.rb:13:in
test_18a'10:11: deftest_18a12: puts "First Run" => 13: test_hdesrbf14:
结束15:
16:
您看到的输出告诉您有关正在修复的错误的更多信息。不要认为有任何转义,尽管它很方便,因为它会告诉您哪行代码失败了,以及为什么失败了。我不是100%确定为什么要简化误差!
你看到两次错误的原因是因为你没有告诉程序结束。你在说"嘿,挽救这个错误类型并输出这个文本。"你没有让它停下来。它会继续,我猜超时找到下一个元素?为了纠正这个问题,不要使用puts来输出错误文本,而是使用raise。这将在文本输出后停止程序。如
def wait_for(timeout = 5)
Selenium::WebDriver::Wait.new(:timeout => timeout).until { yield }
rescue Selenium::WebDriver::Error::TimeOutError
raise 'Timeout Error'
rescue Selenium::WebDriver::Error::NoSuchElementError
raise 'No Such Element Error'
end