javascript - 使用 Cucumber/Capybara 测试执行 JavaScript

标签 javascript ruby cucumber capybara

我希望在我的 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/

相关文章:

javascript - IT 打击 WebDAV - 删除所有内容后文档会损坏

javascript - __doPostBack 在来自 javascript 的 html 渲染上触发(在真正点击之前)

ruby - 在带有 Selenium for Ruby on Rails 的 Heroku 上找不到 Chrome 二进制文件

ruby - 捕获小 cucumber 表中的尾随空格

go - 在GoDog测试框架中使用断言库

javascript - 是否可以将 e.target.property 转换为值并使用它来引用对象?

javascript - Lite-server 未检测到 `bs-config.json` 或 `bs-config.js` 覆盖文件

ruby - @instance_variable 在 ruby​​ block 内不可用?

ruby-on-rails - 抽象出常见的 rspec 功能

ruby-on-rails-3 - 在 cucumber 步骤定义中向 Controller 发送删除请求