after(:each) do
errors = page.driver.browser.manage.logs.get(:browser)
if errors.present?
message = errors.map(&:message).join("\n")
puts message
end
end
这里有另一种方法,目前正在使用Selenium和无头Chrome(也应该可以使用Firefox)。 将以下代码添加到RSpec.configure do |config|块中的spec/rails_helper.rb,所有包含js: true元数据的特性规范都将显示JS错误。
class JavaScriptError< StandardError; end
RSpec.configure do |config|
config.after(:each, type: :feature, js: true) do |spec|
errors = page.driver.browser.manage.logs.get(:browser)
.select {|e| e.level == "SEVERE" && e.message.present? }
.map(&:message)
.to_a
if errors.present?
raise JavaScriptError, errors.join("\n\n")
end
end
end
5条答案
按热度按时间rta7y2nd1#
在这个gist https://gist.github.com/gkop/1371962(alexspeller的代码)的末尾有一个代码样本,它对我来说非常有用。
我最终在我试图调试的JS测试的上下文中完成了这一操作
对于更新版本的headless chrome,请使用
page.driver.browser.logs.get(:browser)
。fnx2tebb2#
这里有另一种方法,目前正在使用Selenium和无头Chrome(也应该可以使用Firefox)。
将以下代码添加到
RSpec.configure do |config|
块中的spec/rails_helper.rb
,所有包含js: true
元数据的特性规范都将显示JS错误。该代码是对此的改编。
对于更新版本的headless chrome,请使用
page.driver.browser.logs.get(:browser)
。3lxsmp7m3#
这并不漂亮,但是您可以注入一个脚本来将错误定向到DOM中,并通过Selenium监视这些更改。
更具体地说,在每个页面中注入一个脚本,该脚本覆盖
window.onerror
或console
,以便错误将信息附加到您注入到DOM中的某个隐藏节点。然后,通过Selenium定期检查并清空该元素的内容,将清空的数据打印到Java控制台。u7up0aaq4#
我不知道这是否会有帮助,但你可以尝试切换到thoughtbot的capybara-webkit驱动程序。它是Selenium的替代品,它是无头的,这意味着它不打开浏览器来运行测试。当我使用这个驱动程序运行测试时(在RSpec+Capybara设置中),所有的Javascript错误都会与我的RSpec输出一起打印出来。
我从来没有尝试过从Selenium转换到capybara-webkit,所以我不知道这在现有的项目上是否可行。如果你没有用Selenium做任何真正花哨的事情,转换可能会相当顺利。但是,如果你依赖于能够在浏览器中观看测试运行,或者对Selenium有其他特定的需求,那么不幸的是我的答案不会有太大的用处。
你可以在这里找到水豚-webkit:https://github.com/thoughtbot/capybara-webkit
安装Qt 4可能会很痛苦,因为你需要Qt 4库。如果你的系统上还没有Qt 4,构建过程可能会花很长时间。对我来说,这是值得的。我更喜欢capybara-webkit,而不是我试过的任何其他解决方案。
rjjhvcjd5#
我正在做一些与Leo类似的事情,但是将浏览器日志作为测试失败消息的一部分: