仅限远程环境中的水豚错误

Capybara errors in remote environment only

我正在尝试在将提交推送到 GitHub 时使用 Rails 中的 rspec/Capybara 自动进行功能测试。似乎找不到表单元素,仔细检查了 ID 并在没有 within 助手的情况下进行了测试。测试 运行 并在本地 运行ning 时顺利通过。但是,使用相同的 Capybara 驱动程序,它们在 运行 自动测试时失败,显示:

Capybara::ElementNotFound:
   Unable to find css "#new_user"

在 GitHub 中执行时,运行 命令开始时出现以下内容(不确定这是否对这个问题有任何重要性):

config.eager_load is set to nil. Please update your config/environments/*.rb files accordingly

在我的 spec_helper.rb:

Capybara.register_driver :chrome_headless do |app|
    options = ::Selenium::WebDriver::Chrome::Options.new

    options.add_argument('--headless')
    options.add_argument('--no-sandbox')
    options.add_argument('--disable-dev-shm-usage')
    options.add_argument('--window-size=1400,1400')

   Capybara::Selenium::Driver.new(app, browser: :chrome, options: options)
end
 
Capybara.default_max_wait_time = 10

Capybara.configure do |config|
   config.javascript_driver = :chrome_headless
end

错误的完整截图:

2020 年 8 月 18 日更新。我现在在 spec_helper.rb 中使用以下配置,但没有找到 select 框。现在正在实施 Codeship,我看到了同样的错误。

  Capybara.register_driver :selenium_headless_chrome do |app|
    caps = Selenium::WebDriver::Remote::Capabilities.chrome(loggingPrefs: { browser: 'ALL' })
    opts = Selenium::WebDriver::Chrome::Options.new
  
    chrome_args = %w[--headless --window-size=1920,1080 --no-sandbox]
    chrome_args.each { |arg| opts.add_argument(arg) }
    Capybara::Selenium::Driver.new(app, browser: :chrome, options: opts, desired_capabilities: caps)
  end

  Capybara.configure do |config|
    # change this to :chrome to observe tests in a real browser
    config.default_max_wait_time = 10 # seconds
    config.javascript_driver = :selenium_headless_chrome
  end

调试 CI 测试可能非常困难。您是否考虑过使用 CircleCI 之类的东西?它提供了登录到远程容器的能力,以及端口转发到本地浏览器以调试测试的能力。

您是否也考虑过使用屏幕截图(CCI 上的工件)在失败时捕获屏幕图像? gem capybara-screenshot 对此很有用。

只是一些想法...

已解决: 使用 puts page.body,输出显示它正在显示模板错误。经过一些故障排除后,确定错误的发生是因为 application.js 清单为空且资产未预编译。在 tests.yml 文件(对于 GitHub 操作)或 Codeship 中的项目设置中添加 yarn install 然后 rails assets:precompile 后,一切都按预期进行.设置命令的完整列表是: rvm use 2.5.8 --install gem install bundler:2.1.4 bundle install yarn install rails assets:precompile