Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
23
Help us understand the problem. What is going on with this article?
@jnchito

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

More than 3 years have passed since last update.

【おことわり】

この情報は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)、どうもありがとうございました。

23
Help us understand the problem. What is going on with this article?
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
jnchito
株式会社ソニックガーデンのRubyプログラマ。 「プロを目指す人のためのRuby入門( https://bit.ly/3wmJheK )」の著者。 および「Everyday Rails - RSpecによるRailsテスト入門 ( https://bit.ly/3rKqrKX )」の翻訳者。 プログラミングスクール「フィヨルドブートキャンプ」のメンターでもある。
sonicgarden
「お客様に無駄遣いをさせない受託開発」と「習慣を変えるソフトウェアのサービス」に取り組んでいるソフトウェア企業

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
23
Help us understand the problem. What is going on with this article?