LoginSignup
24
23

More than 5 years have passed since last update.

Firefox 48以降でselenium-webdriverが動作しない問題とその回避策

Last updated at Posted at 2016-10-01

【おことわり】

この情報は2016/10/1時点のものです。
将来的には状況が変わっている可能性もあるため、適宜最新の情報を参照してください。

問題

Firefox 48以降だと、2016/10/1時点の最新版であるselenium-webdriver 2.53.4を使っても動作しない。(Firefoxが起動するだけで、そこで固まってしまう)

原因

Firefox 48からはサイン済みのエクステンションしか動作しなくなった。SeleniumのFirefoxエクステンションはサインを拒否されているため、動かなくなってしまったとのこと。

Firefox driver in 2.53.4 not working with Firefox 48 · Issue #2559 · SeleniumHQ/selenium

In Firefox 48, Mozilla requires extensions to be signed. They have refused to sign Selenium's Firefox driver extension (webdriver.xpi). Feel free to contact them and/or log an issue for them at https://bugzilla.mozilla.org

Selenium 3.0からはGeckoDriverを使ってこの問題を回避しようとしているようだが、2016/10/1時点では正式版がリリースされていない。
また、後方互換性が維持されている保証がないため、単純にバージョンを上げるだけでは動かない可能性が高い。
(実際、selenium-webdriver 3.0.0.beta3.1を試しにインストールしてみたが、RSpec + Capybaraの環境ではエラーが発生して動作しなかった)

回避策

その1. Firefox 47以前のバージョンに戻す

あえてバージョン47以前のFirefoxにダウングレードし、自動更新を停止すればselenium-webdriverを使うことができる。

Screen Shot 2016-10-01 at 11.54.05.png

その2. Poltergeist等の別のWebドライバに切り替える

最新版のFirefoxをインストールしないとセキュリティ面が心配だ、という場合は、Poltergeist等のWebドライバ(ヘッドレスブラウザ)に切り替えるのも一つの方法。(個人的にはこれがオススメ)

teampoltergeist/poltergeist: A PhantomJS driver for Capybara

ただし、以下のような注意点がある。

  • PhantomJSのインストールが必要(Poltergeistの場合)
  • WebドライバのAPIを直接呼び出すようなコードを書いている場合は、互換性がない可能性がある
  • 画面が見えないので、ブラウザの動きが分かりづらい(ただし、スクリーンショットは保存できる→参考

参考:Everyday Railsの作者もPoltergeistへの移行を推奨している

電子書籍「Everyday Rails - RSpecによるRailsテスト入門」の中でもselenium-webdriverが使われているため、書籍の記述通りにチュートリアルを進めるとこの問題に遭遇する。
この件を著者に報告したところ、「Poltergeistに移行することを推奨する」という回答が返ってきた。

Poltergeistに移行する方法は以下のブログ記事(英語)でも紹介されている。

Switching from Selenium to Poltergeist in RSpec feature specs | Everyday Rails

このほかにも日本語の情報がネット上にたくさんあるので、それらを参考にされたい。

その3. FirefoxではなくChromeを使う

Firefoxの代わりにChromeを使うことも可能。
Chromeを使う場合はまず、ChromeDriverをインストールする。

下記のページにアクセスして、自分のマシンにインストールされているChromeのバージョンに対応したChromeDriverをダウンロードする。

ChromeDriverはPATHの通ったディレクトリに配置する必要がある。
以下はchromedriverを配置する例。

# PATHの設定を確認
$ echo $PATH
/usr/local/bin:...

# ChromeDriverをPATHの通ったディレクトリへコピー
$ cp chromedriver /usr/local/bin

続いて、spec/rails_helper.rbに以下の設定を追加する。

spec/rails_helper.rb
# 適当な場所(ファイルの最後など)に以下の設定を追加する
Capybara.register_driver :chrome do |app|
  Capybara::Selenium::Driver.new(app, browser: :chrome)
end
Capybara.javascript_driver = :chrome

これでRSpecを実行すると、Firefoxの代わりにChromeが起動するようになる。

参考

Special thanks

Everyday Railsを読んでいる最中に問題を見つけて報告してくれた森塚さん(@9gmotonari)、どうもありがとうございました。

24
23
4

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
24
23