我想知道 watir-webdriver 是否能够记录任何控制台错误的输出?这相当于在浏览器中手动打开控制台并在页面加载时观察 JS 错误。我可以通过 watir-webdriver 捕获它并登录/错误吗?
3 回答
如果它对某人有帮助 - 这个解决方案应该有效:
def check_console_log
console_log = @browser.driver.manage.logs.get(:browser)
if console_log != nil
raise(console_log)
end
end
将 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 之类的东西在场景基础上驱动自动化很有用的原因。
我的解决方案基于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
优点:
- 你仍然会得到 RSpec 的正常输出,用于测试
Pass
- 您仍然会收到 watir-webdriver 为测试而抛出的任何错误消息
Fail
(例如超时、未找到元素等) - 当抛出 javascript 错误时,它会被添加到 RSpec 测试结果输出中
缺点:
- 的前两行在
print_js_errors
每次测试后执行