仅限远程环境中的水豚错误
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
我正在尝试在将提交推送到 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