Ruby/Webdriver:错误处理日志输出



我现在正在做的是:

  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

最新更新