我希望在我的 Cucumber 测试中的 after 钩子(Hook)中执行一些 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
有没有我在这里做的事情看起来不正确或者是否有人以不同的方式做这件事?
最佳答案
After
通过 Scenario
对象(刚刚运行的场景)到 block 中,您刚好将变量命名为 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
关于javascript - 使用 Cucumber/Capybara 测试执行 JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29341469/