Help us understand the problem. What is going on with this article?

サポートが終了したchromedriver-helperからwebdrivers gemに移行する手順

More than 1 year has passed since last update.

はじめに

RailsのSystem TestやFeature Spec、System SpecとChromeを組み合わせて動かしたい場合は、ChromeDriverのインストールが別途必要になります。

このインストールを簡便化(勝手にインストール)するために、chromedriver-helperというgemが提供されていました。

Gemfile
group :test do
  # chromedriver-helperをインストールすると、必要に応じてChromeDriverをインストールしてくれる
  gem 'chromedriver-helper'
end

しかし、このgemは2019年3月31日にサポートが終了します。

NOTICE: Ending support for this gem · Issue #83 · flavorjones/chromedriver-helper

chromedriver-helper gemの作者はwebdriversというgemへの移行を推奨しています。

titusfortner/webdrivers: Keep your Selenium WebDrivers updated automatically

ちなみに、chromedriver-helperのインストール完了時にも次のようなメッセージが標示されます。

Post-install message from chromedriver-helper:

  +--------------------------------------------------------------------+
  |                                                                    |
  |  NOTICE: chromedriver-helper is deprecated after 2019-03-31.       |
  |                                                                    |
  |  Please update to use the 'webdrivers' gem instead.                |
  |  See https://github.com/flavorjones/chromedriver-helper/issues/83  |
  |                                                                    |
  +--------------------------------------------------------------------+

そこでこの記事ではchromedriver-helperからwebdrivers gemへの移行方法を説明します。

手順

1. Gemfileのchromedriver-helperをwebdriversに切り替える

まずGemfileの記述を書き換えます。

Gemfile
 group :test do
   # ...
-  gem 'chromedriver-helper'
+  gem 'webdrivers'

Gemfileを書き換えたらbundle installしてください

2. chromedriver-helperに依存しているコードの削除(オプション)

Chromedriver.set_version "2.24"のように、chromedriver-helperに依存したコードがあれば削除します。
(そうしたコードを書いている人はあまりいないと思いますが)

3. webdriversをrequireする → 不要です

rails_helper.rbtest_helper.rbなどで、webdriversをrequireします。

(訂正)通常のRailsアプリケーションであれば、config/application.rbBundler.requireを実行するため、webdriversを明示的にrequireする必要はありません。

4. 動作確認する

テストを実行して問題なく動作することを確認します。

手順は以上です。

備考:ChromeDriverの自動アップデートとパフォーマンス問題

この記事を書いている時点では、webdrivers gemのバージョンは3.7.0です。

chromedriver-helperは初回のみ最新のChromeDriverを自動でインストールし、それ以降は明示的にアップデート用のコマンドを叩いてChromeDriverをアップデートする必要がありました。

一方、webdrivers gemはインストールされているChromeのバージョンとネット上で配布されているChromeDriverのバージョンを比較して、自動的にChromeDriverをアップデートしようとします。

いちおう、適切なバージョンのChromeDriverがインストール済みであればダウンロードはしない、という仕組みにはなっているのですが、この記事を書いている僕の環境ではChromeのバージョンが73.0.3683.86、ChromeDriverのバージョンが73.0.3683.68になっていて、バージョンが完全一致しないせいか、テストを起動するたびに毎回ChromeDriverの再インストールが実行されます。
そのため、chromedriver-helperに比べてテストの実行時間が4秒ほど遅くなってしまいます。

この問題は以下のissueで対応が議論されているため、もしかすると次のバージョンでは状況が改善するかもしれません。

Cache Binaries · Issue #29 · titusfortner/webdrivers

再インストールされているかどうか確認する方法

rails_helper.rbなどでWebdrivers.loggerのログレベルをDEBUGにすると、アップデートの実行状況がターミナルに出力されます。

rails_helper.rb
# rspec-rails(System specやFeature spec)の場合
require 'spec_helper'
ENV['RAILS_ENV'] ||= 'test'
# ...
# アップデートの実行状況をターミナルに出力する
Webdrivers.logger.level = ::Logger::Severity::DEBUG

以下は実際にテストを実行して出力されたログのサンプルです。

2019-03-26 07:11:37 DEBUG Webdrivers Looking for Site: https://chromedriver.storage.googleapis.com
2019-03-26 07:11:38 DEBUG Webdrivers Get response: #<Net::HTTPOK 200 OK readbody=true>
# ...
2019-03-26 07:11:40 DEBUG Webdrivers Checking current version
2019-03-26 07:11:40 DEBUG Webdrivers File is already downloaded: true
2019-03-26 07:11:40 DEBUG Webdrivers Current version of /Users/jnito/.webdrivers/chromedriver is ChromeDriver 73.0.3683.68 (47787ec04b6e38e22703e856e101e840b65afe72)

2019-03-26 07:11:40 DEBUG Webdrivers Deleting /Users/jnito/.webdrivers/chromedriver
2019-03-26 07:11:40 DEBUG Webdrivers Looking for Site: https://chromedriver.storage.googleapis.com
2019-03-26 07:11:40 DEBUG Webdrivers Get response: #<Net::HTTPOK 200 OK readbody=true>
2019-03-26 07:11:40 DEBUG Webdrivers Found Site: https://chromedriver.storage.googleapis.com
2019-03-26 07:11:41 DEBUG Webdrivers Get response: #<Net::HTTPOK 200 OK readbody=true>
2019-03-26 07:11:41 DEBUG Webdrivers Versions now located on downloads site: [#<Gem::Version "2.0">, #<Gem::Version "2.1">, #<Gem::Version "2.10">, #<Gem::Version "2.11">, #<Gem::Version "2.12">, #<Gem::Version "2.13">, #<Gem::Version "2.14">, #<Gem::Version "2.15">, #<Gem::Version "2.16">, #<Gem::Version "2.17">, #<Gem::Version "2.18">, #<Gem::Version "2.19">, #<Gem::Version "2.2">, #<Gem::Version "2.20">, #<Gem::Version "2.21">, #<Gem::Version "2.22">, #<Gem::Version "2.23">, #<Gem::Version "2.24">, #<Gem::Version "2.25">, #<Gem::Version "2.26">, #<Gem::Version "2.27">, #<Gem::Version "2.28">, #<Gem::Version "2.29">, #<Gem::Version "2.3">, #<Gem::Version "2.30">, #<Gem::Version "2.31">, #<Gem::Version "2.32">, #<Gem::Version "2.33">, #<Gem::Version "2.34">, #<Gem::Version "2.35">, #<Gem::Version "2.36">, #<Gem::Version "2.37">, #<Gem::Version "2.38">, #<Gem::Version "2.39">, #<Gem::Version "2.4">, #<Gem::Version "2.40">, #<Gem::Version "2.41">, #<Gem::Version "2.42">, #<Gem::Version "2.43">, #<Gem::Version "2.44">, #<Gem::Version "2.45">, #<Gem::Version "2.46">, #<Gem::Version "2.5">, #<Gem::Version "2.6">, #<Gem::Version "2.7">, #<Gem::Version "2.8">, #<Gem::Version "2.9">, #<Gem::Version "70.0.3538.16">, #<Gem::Version "70.0.3538.67">, #<Gem::Version "70.0.3538.97">, #<Gem::Version "71.0.3578.137">, #<Gem::Version "71.0.3578.30">, #<Gem::Version "71.0.3578.33">, #<Gem::Version "71.0.3578.80">, #<Gem::Version "72.0.3626.69">, #<Gem::Version "72.0.3626.7">, #<Gem::Version "73.0.3683.20">, #<Gem::Version "73.0.3683.68">, #<Gem::Version "74.0.3729.6">]
2019-03-26 07:11:41 DEBUG Webdrivers Looking for Site: https://chromedriver.storage.googleapis.com
2019-03-26 07:11:42 DEBUG Webdrivers Get response: #<Net::HTTPOK 200 OK readbody=true>
2019-03-26 07:11:42 DEBUG Webdrivers Found Site: https://chromedriver.storage.googleapis.com
2019-03-26 07:11:42 DEBUG Webdrivers Get response: #<Net::HTTPOK 200 OK readbody=true>
2019-03-26 07:11:42 DEBUG Webdrivers Get response: #<Net::HTTPOK 200 OK readbody=true>
2019-03-26 07:11:42 DEBUG Webdrivers Successfully downloaded chromedriver_mac64.zip
2019-03-26 07:11:42 DEBUG Webdrivers Decompressing zip
2019-03-26 07:11:42 DEBUG Webdrivers Decompression Complete
2019-03-26 07:11:42 DEBUG Webdrivers Deleting chromedriver_mac64.zip
2019-03-26 07:11:42 DEBUG Webdrivers Completed download and processing of /Users/jnito/.webdrivers/chromedriver

一番最後にCompleted download and processing of /Users/jnito/.webdrivers/chromedriverというメッセージが表示されていることから、ChromeDriverが実際にインストールされたことがわかります。

まとめ

というわけでこの記事ではchromedriver-helperからwebdrivers gemへの移行方法を説明しました。
みなさんが実際にchromedriver-helperからwebdrivers gemに移行する際の参考になれば幸いです。

jnchito
SIer、社内SEを経て、ソニックガーデンに合流したプログラマ。 「プロを目指す人のためのRuby入門」の著者。 http://gihyo.jp/book/2017/978-4-7741-9397-7 および「Everyday Rails - RSpecによるRailsテスト入門」の翻訳者。 https://leanpub.com/everydayrailsrspec-jp
https://blog.jnito.com/
sonicgarden
「お客様に無駄遣いをさせない受託開発」と「習慣を変えるソフトウェアのサービス」に取り組んでいるソフトウェア企業
http://www.sonicgarden.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした