Search code examples
ruby-on-railsrubyseleniumselenium-webdrivercapybara

How to setup Selenium Webdriver, Capybara, and Rails Minitest?


I am currently running WSL2. I have installed google-chrome-stable and chromedriver in the system.

google-chrome-stable: Google Chrome 92.0.4515.131

chromedriver: ChromeDriver 92.0.4515.43

# Gemfile

group :test do
  gem "capybara", ">= 3.26"
  gem "selenium-webdriver"
  gem "webdrivers"
end
# test/application_system_test_case.rb

class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
  driven_by :selenium, using: :headless_chrome do |option|
    option.add_argument "no-sandbox"
  end
end
# test/system/users_test.rb

class UsersTest < ApplicationSystemTestCase
  def setup
    Capybara.app_host = "http://app.example.com/"
  end

  test "user sign up" do
    visit new_user_path
    fill_in "user[name]", with: "Jane Hemmingway"
    fill_in "user[email]", with: "jane@example.com"
    fill_in "user[password]", with: "secret_password"
    click_button "get started"

    assert_redirected_to accounts_path
  end
end

But when I run this test, it throws an error.

Error:
UsersTest#test_user_sign_up:
Selenium::WebDriver::Error::UnknownError: unknown error: net::ERR_NAME_NOT_RESOLVED
  (Session info: headless chrome=92.0.4515.131)
    test/system/users_test.rb:9:in `block in <class:UsersTest>'

I'm confused about what this error means. Is there a way I can fix it?


Solution

  • Ok, so instead of setting Capybara.app_host as http://app.example.com/, we need to set it to http://app.lvh.me.

    We also need to tell capybara to always include the port.

    # test/application_system_test_case.rb
    
    Capybara.configure do |config|
      config.always_include_port = true
    end
    

    Now the tests runs as expected.