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
などで良いと思う
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間で共有しているっぽい
プロファイルを切り替える
環境変数で指定できるようにしている。無い場合はデフォルトの新しいプロファイル
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では内部で自動的に付加されているっぽい