【问题标题】:Ruby/Webdriver : Error handling log outputRuby/Webdriver:错误处理日志输出
【发布时间】:2015-10-14 06:02:50
【问题描述】:

这是我目前正在做的事情:

  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 开始

首次运行超时错误 Timeout Error E ==================================================== ==================================================== ==================================================== ====================================================错误:test_18a(测试):
Selenium::WebDriver::Error::NoSuchElementError: 没有这样的元素 (会话信息:chrome=43.0.2357.134) (驱动程序信息:chromedriver=2.15.322448 (52179c1b310fec1797c81ea9a20326839860b7d3),平台=Windows NT 6.1 SP1 x86_64) C:/Ruby22/lib/ruby/gems/2.2.0/gems/selenium-webdriver-2.46.2/lib/selenium/webdriver/remote/response.rb:71:in assert_ok' C:/Ruby22/lib/ruby/gems/2.2.0/gems/selenium-webdriver-2.46.2/lib/selenium/webdriver/remote/response.rb:34:in initialize' C:/Ruby22/lib/ruby/gems/2.2.0/gems/selenium-webdriver-2.46.2/lib/selenium/webdriver/remote/http/common.rb:78:in 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/gems/2.2.0/gems/selenium-webdriver-2.46.2/lib/selenium/webdriver/remote/http/default.rb:90:in request' C:/Ruby22/lib/ruby/gems/2.2.0/gems/selenium-webdriver-2.46.2/lib/selenium/webdriver/remote/http/common.rb:59:in call' C:/Ruby22/lib/ruby/gems/2.2.0/gems/selenium-webdriver-2.46.2/lib/selenium/webdriver/remote/bridge.rb:657:in 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/gems/2.2.0/gems/selenium-webdriver-2.46.2/lib/selenium/webdriver/remote/bridge.rb:603:in 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.rb:28:in test_hdesrbf' C:/2oh/qt.rb:13:intest_18a' 10: 11:定义测试_18a 12:放置“第一次运行”=> 13:test_hdesrbf 14:结束
15:
16:

【问题讨论】:

    标签: ruby selenium webdriver testunit


    【解决方案1】:

    您看到的输出告诉您有关您正在救援的错误的更多信息。不要认为有任何转义它,尽管它很方便,因为它会告诉你哪一行代码失败了,以及为什么。我实际上并不是 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
    

    【讨论】:

    • 问题是只有一个故障点,我知道是哪一行。我用它输出到一个文本文件,我会自动通过电子邮件发送给技术较少的人,所以我想简化它,这样他们就知道测试超时了。也非常感谢您的加薪修复,绝对解决了这个问题。我不确定有什么区别,我很高兴了解到这一点。非常感谢!
    • 没问题!查看stackoverflow.com/questions/2777802/… 关于输出到文本文件的信息。您可以在加注之前执行您的写入操作。控制台仍然会输出完整的错误,但你可以输出任何你想要的文本文件!
    猜你喜欢
    • 2020-05-30
    • 2012-03-02
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    • 2013-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多