雑文発散

«前の日記(2015-06-02) 最新 次の日記(2015-06-04)» 編集
過去の日記

2015-06-03 [長年日記]

[Karma] Karma でブラウザのプロファイルを切り替えて使う方法 #2 (たぶんこちらが本命の方法)

PHPカンファレンス関西2015で発表した「PHPer だからこそ知っておきたい、JavaScript のテストを複数ブラウザで自動実行する話」のときの質問に答えられなかった件へのアンサー日記(?)を「Karma でブラウザのプロファイルを切り替えて使う方法として書いた。

この時は karma-script-launcher を使った方法を紹介してみたのだけど、「まだ良くわかってないところがある」と自分でも書いているとおり、ちょっと何かがしっくりこなかった。

「プロファイルを切り替えて使いたい」というニーズはよくある話で、Selenium を使ってたときにもオレ自信悩んでいたこともある(例えば自組織内のオレオレ SSL 証明書を許可したプロファイルを使いたい、とか)。

そういう一般的な悩みに対しては、もっと良いアプローチが用意されているのでは?と思って、もうちょっと追加で調べていたら、あったよ、本命と思われる解決策が。

また、Firefox を例にして説明する。Karma で Firefox を使う場合は karma-firefox-launcher を利用するのだけど、npm の説明ページ の Custom Preferences のところにヒントが書かれていた。

browsers: ['FirefoxAutoAllowGUM'],

customLaunchers: {
  FirefoxAutoAllowGUM: {
    base: 'Firefox',
    prefs: {
      'media.navigator.permission.disabled': true
    }
  }
}

この例は、次のような内容になる。

  1. 設定内容(pref)をカスタマイズした Firefox ベースのカスタムランチャー(カスタムブラウザ)を定義する。
    • 名前は「FirefoxAutoAllowGUM」とする
  2. Karma の実行対象ブラウザに 1 で設定したカスタムブラウザを指定する

これで Karma をスタートすると、デフォルト設定のプロファイル中の「media.navigator.permission.disabled」という設定を上書きした Firefox が起動する。

そういうやり方があるのか!と思って、karma-firefox-launcher のソースコードを読み始めたら、プロファイルを指定する方法があった。こんな感じでプロファイルの path を指定してやれば良かったのだ!(念のため言っておくと、この path はオレの(かつ加工している)ものなので、自分の path は自分で探して設定してくださいな)

browsers: ['Firefox_karma_pref'],

customLaunchers: {
  Firefox_karma_pref: {
    base: 'Firefox',
    profile: '/Users/suzuki/Library/Application Support/Firefox/Profiles/5a3krc90.karma'
  }
}

実際にやってみよう。まずは、違いが分かるように karma プロファイルの検索設定を変えておく。プロファイルを選択して Firefox を起動。

起動画面

デフォルト検索エンジンを「Yahoo! JAPAN」へ変更する。

デフォルト検索エンジンを Yahoo! JAPAN へ

これで準備は完了。

では、まず、プロファイルを指定しない、通常の Firefox を指定した Karma を起動する。karma.conf.js の設定はこのようになる。

browsers: ['Firefox']

これで起動した Firefox の設定画面を見てみると、デフォルト検索エンジンが「Google」になっているのが分かる。

デフォルトの Firefox

次は karma プロファイルを設定したカスタムブラウザを指定して起動する。karma.conf.js の設定内容は(繰り返しになるが)こんな感じになる。

browsers: ['Firefox_karma_pref'],

customLaunchers: {
  Firefox_karma_pref: {
    base: 'Firefox',
    profile: '/Users/suzuki/Library/Application Support/Firefox/Profiles/5a3krc90.karma'
  }
}

これで Karma を起動し、同様にデフォルト検索エンジンの設定を見ると「Yahoo! JAPAN」になっているのが分かる。うまく「karma という名前のプロファイル」で Firefox が起動してくれたようだ。

カスタム Firefox

この方法であれば、前回の「karma-script-launcher を利用してプロファイルを指定したシェルスクリプトを起動する」方法で発生していた「どうやって URL の動的 id を指定すれば良いのだろう?」という疑問は起きない。

少なくとも Firefox におけるプロファイル指定は、このカスタムランチャー(カスタムブラウザ)を利用する方法が正解だと思う。これは今年の 1 月に取り込まれた機能のようで、まだ README とかには反映されていない様子。

ソースコードを読んで解決策を得られたので、オープンソースで良かった案件だった。