watir-webdriver可以捕获控制台错误吗?

时间:2011-09-07 20:50:43

标签: watir watir-webdriver

我想知道watir-webdriver是否能够记录任何控制台错误的输出? 这相当于在浏览器中手动打开控制台并在页面加载时查看JS错误。我可以通过watir-webdriver和log / error来捕获它吗?

3 个答案:

答案 0 :(得分:2)

如果它对某人有帮助 - 这个解决方案应该有效:

def check_console_log
    console_log = @browser.driver.manage.logs.get(:browser)
    if console_log != nil
      raise(console_log)
    end
end

答案 1 :(得分:1)

当将watir-webdriver与Cucumber结合使用时,错误(如果有的话)输出到格式良好且包含watir-webdriver错误的html文件。

这可以通过将以下标志添加到cucumber.yml中的默认配置文件来完成:

--color --format pretty --format html -o results.html有关此文件的更多信息here.这里有一些background on Cucumber

但是,如果您在控制台中仅使用watir-webdriver,则可以通过执行以下操作将watir-webdriver错误重定向到文件:

$ ruby your_watir_script.rb 2> watir_debug.log #watir outputs errors as stderr

在大多数情况下,如果watir中的某些内容失败(例如找不到元素),那么之后的所有内容也将失败,这就是为什么像Cucumber这样的东西在场景基础上推动自动化的原因。

答案 2 :(得分:1)

我的解决方案基于Kirikami's answer,不需要黄瓜。此方法仅打印javascript控制台Errors(无警告,信息,日志或调试)。

def print_js_errors
  log = @browser.driver.manage.logs.get(:browser)
  errors = log.select{ |entry| entry.level.eql? 'SEVERE' }
  if errors.count > 0
    javascript_errors = errors.map(&:message).join("\n")
    raise javascript_errors
  end
end

然后,如果你正在使用rspec,你可以这样做:

RSpec.configure do |config|
  config.after :each do
    print_js_errors
  end
end

优点:

  1. 对于Pass
  2. 的测试,您仍然可以获得RSpec的正常输出
  3. 对于Fail的测试(例如超时,未找到元素等),您仍会收到watir-webdriver引发的任何错误消息。
  4. 当抛出javascript错误时,它会被添加到RSpec测试结果输出
  5. 缺点:

    1. 每次测试后执行print_js_errors的前两行
相关问题