Phantomjs 没有正确加载 CSS/JS

Phantomjs does not load the CSS/JS correctly

我在 运行 测试时遇到 phantomjs 无法正确呈现页面的问题。请看附图

功能助手代码:

require 'rails_helper'
require 'capybara-screenshot/rspec'
require 'capybara/dsl'
require 'capybara/poltergeist'

Dir[Rails.root.join('spec/features/support/**/*.rb')].each { |f| require f }

Capybara.register_driver :poltergeist do |app|
  Capybara::Poltergeist::Driver.new(app, {
    js_errors: false,
    phantomjs_options: ['--ignore-ssl-errors=yes', '--ssl-protocol=any'],
    debug: false,
    :timeout => 120,
    window_size: [1600, 1200],
    # timeout: 5.minutes,
    extensions: [
       Rails.root.join('spec/features/support/phantomjs/disable_animations.js')
    ]
  })
end

RSpec.configure do |config|
 config.include Auth
 config.include General
end

Capybara.configure do |config|
  config.default_selector = :css
  config.javascript_driver = :poltergeist
  # config.javascript_driver = :poltergeist_debug
  config.server_host = 'foo.xxx.localhost'
    Capybara.server_port = 3001
  config.default_max_wait_time = 10
end

PhantomJS 的最新发布版本 (2.1.x) 基本上相当于 6-7 年前的 Safari 版本。因此,他们不支持很多现代 CSS/JS。因此,呈现不正确的最可能原因是在页面中使用了不受支持的功能。如果是不受支持的 JS 导致了您的问题,那么在您的驱动程序注册中启用 js_errors and/or debug 可能会显示这一点。如果使用不受支持的 CSS(例如 CSS 网格),则不会显示任何错误,只是渲染出错。

如果您需要 100% 正确的渲染并且不打算修改您的应用程序以支持旧浏览器,那么您可能希望从使用 Poltergeist/PhantomJS 更改为使用 Chrome 的 selenium 驱动程序(在如果需要,无头模式)。