#はじめに
Ruby on Rails 5 速習実践ガイドでのテスト環境構築中にはまりました。
##実行環境
Rails (5.2.1)
Ruby (2.5.1)
Selenium-webdriver (3.141)
capybara (3.12.0)
rspec-rails (3.8.1)
chromedriver-helper (2.1.0)
Ubuntu VERSION="18.04.1 LTS (Bionic Beaver)"
#発生した問題
vagrant@ubuntu-bionic:/vagrant/taskleaf$ bundle exec rspec spec/system/tasks_spec.rb
Capybara starting Puma...
* Version 3.12.0 , codename: Llamas in Pajamas
* Min threads: 0, max threads: 4
* Listening on tcp://127.0.0.1:36095
F
Failures:
1) タスク管理機能 一覧表示機能 ユーザーAがログインしているとき ユーザーAが作成したタスクが表示される
Got 0 failures and 2 other errors:
1.1) Failure/Error: visit login_path
Selenium::WebDriver::Error::WebDriverError:
unable to connect to chromedriver 127.0.0.1:9515
# ./spec/system/tasks_spec.rb:15:in `block (4 levels) in <top (required)>'
1.2) Failure/Error: raise Error::WebDriverError, cannot_connect_error_text
Selenium::WebDriver::Error::WebDriverError:
unable to connect to chromedriver 127.0.0.1:9515
##「unable to connect to chromedriver」への対処法
chromedriver-helperのREADMEにもこのエラーはknown issuesとして紹介されています。
https://github.com/flavorjones/chromedriver-helper
調べているとgem(chromedriver-helper)をアンインストールしてchromedriverを直接ダウンロードすることで動くようになった模様。
https://github.com/SeleniumHQ/selenium/issues/5248
#発生した問題2
chromedriverをインストールして再びテストを実行してみると
vagrant@ubuntu-bionic:/vagrant/taskleaf$ bundle exec rspec spec/system/tasks_spec.rb
Capybara starting Puma...
* Version 3.12.0 , codename: Llamas in Pajamas
* Min threads: 0, max threads: 4
* Listening on tcp://127.0.0.1:34647
F
Failures:
1) タスク管理機能 一覧表示機能 ユーザーAがログインしているとき ユーザーAが作成したタスクが表示される
Got 0 failures and 2 other errors:
1.1) Failure/Error: visit login_path
Selenium::WebDriver::Error::UnknownError:
unknown error: cannot find Chrome binary
(Driver info: chromedriver=2.35.528139 (47ead77cb35ad2a9a83248b292151462a66cd881),platform=Linux 4.15.0-36-generic x86_64)
# ./spec/system/tasks_spec.rb:15:in `block (4 levels) in <top (required)>'
1.2) Failure/Error: e = error
Selenium::WebDriver::Error::UnknownError:
unknown error: cannot find Chrome binary
(Driver info: chromedriver=2.35.528139 (47ead77cb35ad2a9a83248b292151462a66cd881),platform=Linux 4.15.0-36-generic x86_64)
# /vagrant/taskleaf/vendor/bundle/ruby/2.5.0/gems/selenium-webdriver-3.141.0/lib/selenium/webdriver/remote/response.rb:69:in `assert_ok'
# /vagrant/taskleaf/vendor/bundle/ruby/2.5.0/gems/selenium-webdriver-3.141.0/lib/selenium/webdriver/remote/response.rb:32:in `initialize'
# /vagrant/taskleaf/vendor/bundle/ruby/2.5.0/gems/selenium-webdriver-3.141.0/lib/selenium/webdriver/remote/http/common.rb:84:in `new'
# /vagrant/taskleaf/vendor/bundle/ruby/2.5.0/gems/selenium-webdriver-3.141.0/lib/selenium/webdriver/remote/http/common.rb:84:in `create_response'
# /vagrant/taskleaf/vendor/bundle/ruby/2.5.0/gems/selenium-webdriver-3.141.0/lib/selenium/webdriver/remote/http/default.rb:104:in `request'
(略)
# /home/vagrant/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/bundler-1.17.1/lib/bundler/friendly_errors.rb:124:in `with_friendly_errors'
# /home/vagrant/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/bundler-1.17.1/exe/bundle:22:in `<top (required)>'
# /home/vagrant/.rbenv/versions/2.5.1/bin/bundle:23:in `load'
# /home/vagrant/.rbenv/versions/2.5.1/bin/bundle:23:in `<main>'
#
# Showing full backtrace because every line was filtered out.
# See docs for RSpec::Configuration#backtrace_exclusion_patterns and
# RSpec::Configuration#backtrace_inclusion_patterns for more information.
Finished in 30.98 seconds (files took 41.99 seconds to load)
1 example, 1 failure
Failed examples:
rspec ./spec/system/tasks_spec.rb:21 # タスク管理機能 一覧表示機能 ユーザーAがログインしているとき ユーザーAが作成したタスクが表示される
##「unknown error: cannot find Chrome binary」への対処法
chromedriverの公式ドキュメントのsetupの部分に次のように書いてありました。(http://chromedriver.chromium.org/getting-started)
・Ensure Chromium/Google Chrome is installed in a recognized location
仮想環境上にGoogle Chromeがインストールされていなかったのが原因だったと思います。
そこでGoogle Chromeがすでにインストールされているローカル環境(mac)での開発にシフトしました。
- mac用のchromedriverをインストール(https://chromedriver.storage.googleapis.com/index.html?path=2.44/)
2 パスが通っている場所にchromedriverを置く
$ echo $PATH
/Users/kentaro/.rbenv/shims:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/kentaro/.rbenv/shims:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:
/usr/local/binの下に置きました
3 パスが通っていることを確認
$ which chromedriver
/usr/local/bin/chromedriver
4 テストを実行
$ bundle exec rspec spec/system/tasks_spec.rb
Capybara starting Puma...
* Version 3.12.0 , codename: Llamas in Pajamas
* Min threads: 0, max threads: 4
* Listening on tcp://127.0.0.1:59072
.
Finished in 5.21 seconds (files took 9.85 seconds to load)
1 example, 0 failures
なんとか動いた!