Selenium::WebDriver::Error::UnknownError : (selenium 대신 rack을 지정하여 테스트 실행)
환경
Rails5.2
Ruby2.5
rspec-rails 3.7
도커
상황
Rspec에서 SystemSpec을 구현하는 동안 다음 오류가 발생했습니다. .
terminal
Selenium::WebDriver::Error::UnknownError:
unknown error: Chrome failed to start: exited abnormally.
(unknown error: DevToolsActivePort file doesn't exist)
(The process started from chrome location /usr/bin/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
日本語訳
Selenium::WebDriver::Error::UnknownError。
不明なエラーです。Chrome の起動に失敗しました: 異常終了しました。
(不明なエラー: DevToolsActivePortファイルが存在しない)
(chromeの場所/usr/bin/google-chromeから起動したプロセスはもう実行されていないので、ChromeDriverはChromeがクラッシュしたと仮定しています)
조사해 보면이 오류의 대처법이 기재되어있는 기사는
고맙게도 비교적 다양한 것을 찾을 수있었습니다.
(chrome-driver를 설치하고, googlechrome을 최신 버전으로 업데이트하고,
rails_helper.rb의 설명을 수정하거나 capybara 버전을 변경하는 등,
나도 여러 가지 시도했습니다 ...)
그러나
selenium
를 사용하지 않고 rack
대처법을 정리하겠습니다.대상
SystemSpec에서 비슷한 오류가 발생했습니다.
JavaScriptのテストは不要な方
→
JavaScriptの動作を確認するテストが必要な方はseleniumを用いる必要があるからです。
제 경우에는 JavaScript의 동작 확인이 불필요했기 때문에,selenium_chrome_headless
은 감히 사용하지 않는 선택을 했습니다.(JavaScript를 검증하지 않는 테스트의 경우, rack 쪽이 테스트를 달리는 시간을 단축할 수 있다고 한다
장점도 있는 것 같습니다. )
갔다
①rails_helper.rb 수정
수정한 것은 다음과 같습니다.
spec/rails_helper.rb
config.include FactoryBot::Syntax::Methods
config.before(:each) do |example|
if example.metadata[:type] == :system
if example.metadata[:js]
driven_by :selenium, using: :headless_chrome, screen_size: [1400, 1400]
else
driven_by :rack_test
end
end
end
# Capybara.javascript_driver = :selenium
↑ここを記載していましたが、コメントアウトにする
end
②capybara.rb의 수정
spec/capybara.rb
RSpec.configure do |config|
config.before(:each, type: :system) do
driven_by :rack_test
end
end
Capybara.default_driver = :rack_test
↑rack_testで行うことを明示。
위의 작업을 수행하고 다시
terminal
docker-compose exec 【アプリ名】 bundle exec rspec spec/system
할 때 테스트가 통과했습니다!
※ 만약을 위해
Gemfile
group :development, :test do
# Call 'byebug' anywhere in the code to stop execution and get a debugger console
gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
gem 'rspec-rails'
gem 'factory_bot_rails'
gem 'pry-rails'
gem 'pry-doc'
gem 'pry-byebug'
gem 'rails-erd'
gem 'annotate'
gem 'rails-controller-testing'
gem 'capybara', '~> 2.15'
gem 'selenium-webdriver'
end
비교적 시간을 들여 괴롭혔습니다만 해결책은 매우 심플했습니다...
원래, Rspec, capybara에 대한 지식이나 드라이버의 이해 등, 공부할 필요가 있다고 느꼈습니다.
Reference
이 문제에 관하여(Selenium::WebDriver::Error::UnknownError : (selenium 대신 rack을 지정하여 테스트 실행)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/chiaki-kjwr/items/b1ad5be3ede9e15c865d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)