Как настроить Selenium Webdriver, Capybara и Rails Minitest?

#ruby-on-rails #ruby #selenium #selenium-webdriver #capybara

Вопрос:

В настоящее время я запускаю WSL2. Я установил google-chrome-stable и chromedriver в системе.

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
 

Но когда я запускаю этот тест, он выдает ошибку.

 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>'
 

Я не понимаю, что означает эта ошибка. Есть ли способ, которым я могу это исправить?

Комментарии:

1. Вместо option.add_argument "no-sandbox" того, чтобы вы можете попробовать option.add_argument "--no-sandbox"

2. Хорошо, я думаю, что знаю, в чем проблема. Capybara.app_host = "http://app.example.com/" является ли здесь виновником. Когда я удаляю это и изменяю свои маршруты, тесты выполняются успешно.

3. Но маршруты имеют ограничение на поддомен. Итак, как мне сделать так, чтобы капибары посещали маршруты с app поддоменом? Есть какие-нибудь зацепки? Если я переопределю Capybara.app_host тесты, они завершатся ошибкой, упомянутой в вопросе.

Ответ №1:

Хорошо, поэтому вместо того , чтобы устанавливать Capybara.app_host как http://app.example.com/ , нам нужно установить его в http://app.lvh.me .

Нам также нужно сказать капибаре, чтобы она всегда включала порт.

 # test/application_system_test_case.rb

Capybara.configure do |config|
  config.always_include_port = true
end
 

Теперь тесты проходят, как и ожидалось.

Ответ №2:

Ошибка net::ERR_NAME_NOT_RESOLVED говорит вам, в чем проблема. www.example.com не выполняется разрешение на ip-адрес на любой машине, на которой запускается браузер.