我希望在我的黄瓜测试中在挂钩中执行一些JavaScript,我想要做的是捕获任何JavaScript错误并在我的控制台中输出错误。
我目前遇到的问题是使用execute_script
方法运行一段JavaScript
我收到错误
undefined method `execute_script' for #<Cucumber::Ast::Scenario:0x5878608> (NoMethodError)
这是我到目前为止的设置
Capybara.register_driver :firefox do |app|
profile = Selenium::WebDriver::Firefox::Profile.new
# see https://github.com/mguillem/JSErrorCollector
profile.add_extension "./lib/firefox_extensions/JSErrorCollector.xpi"
profile.native_events = false
Capybara::Selenium::Driver.new(app, :browser => :firefox)
end
(我是否通过正确指定路径正确添加扩展名?使用.
从根开始?)
我的后挂钩
After do |page|
errors = page.execute_script("return window.JSErrorCollector_errors.pump()")
if errors.any?
STDOUT.puts '-------------------------------------------------------------'
STDOUT.puts "Found #{errors.length} javascript #{pluralize(errors.length, 'error')}"
STDOUT.puts '-------------------------------------------------------------'
errors.each do |error|
puts " #{error["errorMessage"]} (#{error["sourceName"]}:#{error["lineNumber"]})"
end
raise "Javascript #{pluralize(errors.length, 'error')} detected, see above"
end
end
我在这里做的任何事情看起来都不正确,或者有人以不同的方式做这件事吗?
答案 0 :(得分:0)
After
将Scenario
对象(刚刚运行的方案)传递给块,您恰好命名变量page
。通常,此变量将被称为scenario
。 undefined_method
行显示错误消息中#<Cucumber::Ast::Scenario:0x5878608>
来自哪个对象类型(NoMethodError
)。
您应该能够像在After
步骤中一样在Cucumber
块中执行代码。
After do |scenario|
errors = page.execute_script("return window.JSErrorCollector_errors.pump()")
if errors.any?
STDOUT.puts '-------------------------------------------------------------'
STDOUT.puts "Found #{errors.length} javascript #{pluralize(errors.length, 'error')}"
STDOUT.puts '-------------------------------------------------------------'
errors.each do |error|
puts " #{error["errorMessage"]} (#{error["sourceName"]}:#{error["lineNumber"]})"
end
raise "Javascript #{pluralize(errors.length, 'error')} detected, see above"
end
end