AWS Cloud9でCapybara+Selenium+Chrome設定時のエラーとその対処法について[ Everyday Rails 6章 ]

はじめに

Rails チュートリアル」にて開発環境としてAWS Cloud9を使っていたことから、「Everyday Rails - RSpecによるRailsテスト入門」を進める際にも継続してAWS Cloud9を利用しています。

railstutorial.jp

leanpub.com

しかし、6章の「JavaScriptを使った操作をテストする」という項目で記載通りにSelenium+Chromeの設定をし、スペックを実行しようとしてもエラーが出てしまい実行することが出来ませんでした。

本記事では、私が直面したエラーメッセージとその対処法を記載したいと思います。

対象

  • 「Everyday Rails - RSpecによるRailsテスト入門」の6章を進めている途中でエラーによって詰まってしまった人
  • 下記、設定は完了している

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 LinuxChromeが入っていないことが原因だと考えられます。
下記コマンドを実行し、インストールを行ないましょう。

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を実行しましょう。

参考
stackoverflow.com

おわりに

今回、AWS Cloud9にてCapybara+Selenium+Chrome設定時に私が直面したエラーとその対処法についてご紹介しました。
同様のエラーに直面した際の参考になればと思います。