#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-адрес на любой машине, на которой запускается браузер.