Selenium::WebDriver::Error::UnknownError:の対処法(seleniumではなくrackを指定してテストを走らせる)
環境
Rails5.2
Ruby2.5
rspec-rails 3.7
Docker
状況
RspecでSystemSpecを実装中に下記のエラーに悩まされました。。
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を修正
修正したのは以下になります。
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の修正
RSpec.configure do |config|
config.before(:each, type: :system) do
driven_by :rack_test
end
end
Capybara.default_driver = :rack_test
↑rack_testで行うことを明示。
上記を行い、再度
docker-compose exec 【アプリ名】 bundle exec rspec spec/system
を行うとテストがパスしました!
※念のため
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に対する知識やドライバの理解等、勉強する必要があると感じました。
Author And Source
この問題について(Selenium::WebDriver::Error::UnknownError:の対処法(seleniumではなくrackを指定してテストを走らせる)), 我々は、より多くの情報をここで見つけました https://qiita.com/chiaki-kjwr/items/b1ad5be3ede9e15c865d著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .