1

在将提交推送到 GitHub 时,我正在尝试使用 Rails 中的 rspec/Capybara 自动化功能测试。似乎找不到表单元素,仔细检查了 ID 并在没有within助手的情况下进行了测试。在本地运行时,测试运行并顺利通过。但是,使用相同的 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但没有找到选择框。现在正在实施 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
4

2 回答 2

1

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

于 2020-08-27T13:38:03.903 回答
0

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

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

只是一些想法...

于 2020-08-26T18:02:11.353 回答