【发布时间】:2016-06-30 14:18:55
【问题描述】:
我想知道 watir-webdriver 是否能够记录任何控制台错误的输出? 这相当于在浏览器中手动打开控制台并在页面加载时观察 JS 错误。我可以通过 watir-webdriver 捕获这个并记录/错误吗?
【问题讨论】:
标签: watir watir-webdriver
我想知道 watir-webdriver 是否能够记录任何控制台错误的输出? 这相当于在浏览器中手动打开控制台并在页面加载时观察 JS 错误。我可以通过 watir-webdriver 捕获这个并记录/错误吗?
【问题讨论】:
标签: watir watir-webdriver
如果它对某人有帮助 - 这个解决方案应该有效:
def check_console_log
console_log = @browser.driver.manage.logs.get(:browser)
if console_log != nil
raise(console_log)
end
end
【讨论】:
get_log?
def getLog(type) data = execute :getLog, {}, :type => type.to_s Array(data).map do |l| LogEntry.new l.fetch('level'), l.fetch('timestamp'), l.fetch('message') end end 中描述
当结合使用 watir-webdriver 和 Cucumber 时,错误(如果有)会输出到一个格式很好的 html 文件,并且包含 watir-webdriver 错误。
这可以通过将以下标志添加到 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 之类的东西在场景基础上驱动自动化很有用。
【讨论】:
我的解决方案基于Kirikami's answer,不需要 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
优点:
Pass 的测试,您仍然可以得到 RSpec 的正常输出
Fail 的测试,您仍然会收到 watir-webdriver 抛出的任何错误消息(例如超时、未找到元素等)缺点:
print_js_errors 的前两行在每次测试后执行【讨论】: