Reputation: 79
I am trying to automate feature tests using rspec/Capybara in Rails when pushing commits to GitHub. It seems not find the form elements, double checked the ID and tested without the within
helper. The tests run and pass without issue when running locally. However, using the same Capybara driver, they fail when running the automated tests, showing:
Capybara::ElementNotFound:
Unable to find css "#new_user"
When executing in GitHub, the following appears when the run command begins (unsure if this has any importance to this issue):
config.eager_load is set to nil. Please update your config/environments/*.rb files accordingly
in my 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
Update 8/18/2020. I am now using the following configuration in spec_helper.rb
and it is not finding select boxes. Now working on implenting Codeship, I am seeing the same error.
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
Upvotes: 1
Views: 1419
Reputation: 79
Solved:
Using puts page.body
, the output showed that it was displaying a template error. After some troubleshooting it was determined that the error was happening because of the application.js manifest being empty and assets not precompiling. After adding yarn install
then rails assets:precompile
in the tests.yml file (for GitHub actions) or project settings in Codeship, everything worked as expected. The full list of setup commands is:
rvm use 2.5.8 --install
gem install bundler:2.1.4
bundle install
yarn install
rails assets:precompile
Upvotes: 3
Reputation: 14610
Debugging CI tests can be extremely hard. Have you considered using something like CircleCI? It offers the ability to log in to the remote container, and also port forwarding to a local browser to debug tests.
Also have you considered using screenshots (artifacts on CCI) to capture an image of the screen at fail time? The gem capybara-screenshot can be useful for this.
Just some ideas...
Upvotes: 0