194
162

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-03-25

はじめに

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に移行する際の参考になれば幸いです。

194
162
8

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
194
162

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?