LoginSignup
19
16

More than 5 years have passed since last update.

複数バージョンのFirefoxをSeleniumでテストする

Last updated at Posted at 2014-02-26

FirefoxがNew IEへの道をたどりつつある昨今いかがお過ごしでしょうか?

古いFirefoxを使って、テスト(CI)を走らせる必要があったのでその方法をまとめる
今回の環境はMacOSX上でのRailsのプロジェクトでCapyabra(Selenium)を使ってテストを動かす

古いFirefoxのインストール

過去のFirefoxダウンロード一覧
https://ftp.mozilla.org/pub/firefox/releases/
(今回必要だったのはバージョン25)

いったんデスクトップなどにコピーしFirefox25.appなどにリネームし/Applications/に移動

Seleniumの設定変更

設定を書くファイルはspec/spec_helper.rb, spec/support/env.rb, spec/support/selenium.rbなどで良いと思う

spec/support/env.rb
require 'selenium-webdriver'
firefox_path = '/Applications/Firefox25.app/Contents/MacOS/firefox-bin'
Selenium::WebDriver::Firefox::Binary.path = firefox_path

環境変数で切り替えられるようにする場合(例)

if ENV['FIREFOX25']
  ...
end

問題点

環境設定の自動更新をオフにする必要がある

メニュー > Firefox > 環境設定 > 詳細 > [更新] > 更新の確認は行わない

環境設定の自動更新をオフにしないと、次回以降の起動でいつのまにか更新されてたりするので要確認
テスト実行時もバージョンを良く確認するようにする

メニュー > Firefox > Firefoxについて

自動更新されてしまったら再度上書きでインストールし直す
(この辺の挙動は良くわからなくて、もともと入っている/Applications/Firefox.appと環境設定を共有している?かもしれない)

Firefoxの同時起動と警告

最新のFirefoxと古いものを同時に起動すると、警告が出たが、出ない時もあった
この辺の挙動も良くわからない

今は古いバージョンのFirefoxで走らせるプロジェクトは1つのみなので、Jenkinsのビルドがかぶらないように気をつけているだけ

プロファイルの切り替え

上記の問題点がプロファイルの切り替えで解決するかもしれないと考えて、やってみたが実際解決したかどうか良くわかっていない

デフォルトでSeleniumは毎回新しいプロファイルを使っている

プロファイルの追加

$ /Applications/Firefox.app/Contents/MacOS/firefox-bin -profilemanager

→ 新規プロファイルの作成...

もともとdefaultがあるはずで、これは普通に使っていてDockなどからFirefox.appを起動した場合のプロファイル

$ /Applications/Firefox25.app/Contents/MacOS/firefox-bin -profilemanager でも同じダイアログが出たので、プロファイルはFirefox間で共有しているっぽい

プロファイルを切り替える

環境変数で指定できるようにしている。無い場合はデフォルトの新しいプロファイル

spec/support/env.rb
firefox_path = '/Applications/Firefox25.app/Contents/MacOS/firefox-bin'
Selenium::WebDriver::Firefox::Binary.path = firefox_path
profile = if ENV['FIREFOX_PROFILE_NAME']
  Selenium::WebDriver::Firefox::Profile.from_name(ENV['FIREFOX_PROFILE_NAME'])
else
  Selenium::WebDriver::Firefox::Profile.new
end

Capybara.register_driver :selenium do |app|
  Capybara::Selenium::Driver.new(app, :browser => :firefox, :profile => profile)
end

実行のコマンドは例えば

$ FIREFOX_PROFILE_NAME=selenium rspec

FIREFOX_PROFILE_NAME=defaultで通常使っているプロファイルも指定できる

その他

bundle update selenium-webdriver

Firefoxを常に最新にしている場合は、定期的にSeleniumが動かなくなる
Seleniumも最新にすることで直ることが多い

$ bundle update selenium-webdriver

firefoxとfirefox-binの違い

ls -al /Applications/Firefox.app/Contents/MacOS/firefox*
するとfirefoxとfirefox-binでファイルサイズが違うが調べても違いはあまり良く分からなかった

とりあえず動いているのでOK

-no-remote

コマンドラインでFirefoxを起動している例で、多くの場合-no-remoteオプションをつけている
ソース見るとSeleniumでは内部で自動的に付加されているっぽい

19
16
0

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
19
16