16

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

4

3 回答 3

3

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

def check_console_log
    console_log = @browser.driver.manage.logs.get(:browser)
    if console_log != nil
      raise(console_log)
    end
end
于 2015-12-08T02:18:31.277 回答
1

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

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

--color --format pretty --format html -o results.html有关此文件的更多信息,请点击此处。这是Cucumber的一些背景知识。

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

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

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

于 2012-05-29T03:30:52.553 回答
1

我的解决方案基于Kirikami 的回答,不需要 Cucumber。此方法仅打印 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. 你仍然会得到 RSpec 的正常输出,用于测试Pass
  2. 您仍然会收到 watir-webdriver 为测试而抛出的任何错误消息Fail(例如超时、未找到元素等)
  3. 当抛出 javascript 错误时,它会被添加到 RSpec 测试结果输出中

缺点:

  1. 的前两行在print_js_errors每次测试后执行
于 2016-06-30T06:10:56.847 回答