AWS Cloud9でCapybara+Selenium+Chrome設定時のエラーとその対処法について[ Everyday Rails 6章 ]
はじめに
「Rails チュートリアル」にて開発環境としてAWS Cloud9を使っていたことから、「Everyday Rails - RSpecによるRailsテスト入門」を進める際にも継続してAWS Cloud9を利用しています。
しかし、6章の「JavaScriptを使った操作をテストする」という項目で記載通りにSelenium+Chromeの設定をし、スペックを実行しようとしてもエラーが出てしまい実行することが出来ませんでした。
本記事では、私が直面したエラーメッセージとその対処法を記載したいと思います。
対象
- AWS Cloud9でRuby on RailsおよびRSpecを使用している
- 下記、設定は完了している
spec/rails_helper.rbの以下の行のコメントアウトを外している
Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
spec/support/capybara.rbに以下を記述
Capybara.javascript_driver = :selenium_chrome
Gemfileに'chromedriver-helper'を追加
エラーメッセージとその対処法
その1
Selenium::WebDriver::Error::UnknownError: unknown error: cannot find Chrome binary
Amazon LinuxにChromeが入っていないことが原因だと考えられます。
下記コマンドを実行し、インストールを行ないましょう。
curl https://intoli.com/install-google-chrome.sh | bash
参考
https://www.t4traw.net/blog/2018/03/awsamazon-cloud9環境でheadless-chromeを使う/
その2
Selenium::WebDriver::Error::UnknownError: unknown error: Chrome failed to start: exited abnormally
spec/support/capybara.rbの記述内容を以下のように修正します。
Capybara.javascript_driver = :selenium_chrome_headless
Capybara.javascript_driver = :selenium_chromeでは実際にChromeを開いてテストしますが、AWS Cloud9ではそれが出来ないのだと思われます。
そのため、ヘッドレスモードを使ってテストをするように設定することで解決します。
その3
NameError: uninitialized constant Selenium::WebDriver::Chrome::Options
「::Selenium::WebDriver::Chrome::Options」はselenium-webdriverのバージョン3.4.1にて追加されたため、それ以上のバージョンにしなければなりません。Gemfileのselenium-webdriverのバージョンを3.4.1以上に設定し、bundle installを実行しましょう。