如何在 Rails 5.1 中 运行 headless 浏览器系统测试?

How can I run headless browser system tests in Rails 5.1?

documentation for Rails 5.1 system tests有点稀疏。我无法获得执行 javascript 运行 的无头测试。我认为一种方法需要安装和 运行 xvf。但这比我在 rails.

的其他版本中使用 运行 capybara 时更多的手动设置

实现此目的最直接的方法是什么?

在Rails 5.1 系统测试中使用的驱动程序由ApplicationSystemTestCase (test/application_system_test_case.rb) 中的driven_by 调用设置。假设你已经将你的 capybara-webkit 驱动程序注册为 'webkit' 你应该能够做到

driven_by :webkit

如果您在 linux/mac 上使用 Chrome 59+,另一个可能的选择是使用无头 chrome

Capybara.register_driver :headless_chrome do |app|
  Capybara::Selenium::Driver.new(app, :browser => :chrome, :args => ['headless'])
end

然后在你的测试用例中 class

driven_by :headless_chrome

这为您提供了 chrome 的无头版本,因此 none capybara-webkit/poltergeist 不支持当前 Web 标准的问题。不幸的是,当前 chrome 驱动程序存在 JS 系统模式问题(警告、确认、提示 - capybara master 分支中的解决方法)并且如果您在测试期间尝试关闭 windows 则挂起。希望这 2 个问题能尽快得到解决。

另请注意,对于大多数人的测试,rails 5.1 应该不再需要 database_cleaner,因为它已经在测试模式下处理了多个线程之间的单个数据库连接共享。