profileを指定すること
firefoxはchromeに比べてブラウザの設定を外からいじるようなことがあまり出来ません。
例えばchromeではPDFダウンロードをする設定がnightwatch.jsonで指定できるのに対して、firefoxでは出来なかったり。
じゃあfirefoxでは出来ないのかというとそうではなくて、firefoxのprofile内で設定するとできます。
色々設定を行ったprofileをnightwatch.jsonで指定してあげればいいのですが、ここが結構上手くいかなかったり・・・。
最新のfirefoxのバージョン、selenium server standalone、geckodriverでは自分の環境の場合動きませんでした。
https://github.com/nightwatchjs/nightwatch/issues/1543
issueには動くって言う人もいるんですけどね。
何とか動いた自分の環境とprofileの指定方法を書いておきます。
selenium server standaloneのバージョンとかも落としているのでfirefoxとchromeなどの複数ブラウザ併存のnightwatch.jsonにする時にはseleniumのserver_pathもtest_settingsの中に入れてます。
動作環境
firefox 57.0
geckodriver v0.18.0 windows 32bit or 64bit
selenium-server-standalone.jar 3.4.0
profile
profileの作成
windowsキー+Rキーで「ファイル名を指定して実行」を呼び出し、
firefox.exe -p
と入力します。
すると、profileの選択画面が表示されます。
ここでは既にnightwatchというprofileがありますが、自分が作成したやつです。
「新しいプロファイルを作成」を選択し、profile名を決めて作成します。
そうするとnightwatchと表示されているprofileのように増えているはずです。
profileの設定
自分のようにバージョンを落としたfirefoxを使用する場合は自動更新をオフにする必要があります。
ちなみにfirefox自体をインストールする際も、カスタムインストールを選択して自動更新の設定をする場所があるので注意です。
作成したprofileを選択し、「オフライン作業」にチェックを付けて起動してください。
firefoxが指定したprofileで起動されました。
Firefoxの更新というカテゴリがあるので、「更新の確認は行わない(非推奨)」を選択します。
しかし、他のprofile(defaultとか)で更新がされるようになっていた場合はfirefoxが更新されてバージョンも上がってしまうのでお気を付けを。
profileはどこに保存されているのか
「C:\Users\[USERNAME]\AppData\Roaming\Mozilla\Firefox\Profiles」にあります。
ディレクトリごとにprofile名で保存されています。
nightwatchでprofileを指定する
作成したprofileをnightwatchで実行する際に読み込むように設定していきます。
seleniumの設定にprofileを渡してあげます。
{ "src_folders": [ "tests" ], "output_folder": "reports", "selenium": { "start_process": true, "log_path": "./log", "port": 4444 }, "test_settings": { "default": { "desiredCapabilities": { "browserName": "firefox" }, "selenium": { "server_path": "./lib/selenium-server-standalone.jar", "cli_args": { "webdriver.gecko.driver": "./lib/geckodriver.exe", "webdriver.firefox.profile": "nightwatch" } } } } }
これで、成功すれば作成したprofileでfirefoxが起動されます。
失敗するとまったく新しいprofileが作成され、自動的にfirefoxのアップデートがかかってしまうという罠に陥ります。
命懸けです。
別で作成したprofileを読み込むようにしたい
profileデータをあらかじめ持っている場合、firefoxにprofileを認識させるところが必要です。
先ほど「C:\Users\[USERNAME]\AppData\Roaming\Mozilla\Firefox\Profiles」にprofileが保存されると言いましたが、
profileの管理は一つ上の階層にあるprofiles.iniファイルが司っています。
profiles.iniを開くと中身はこんな記述になっています。
[General] StartWithLastProfile=0 [Profile0] Name=default IsRelative=1 Path=Profiles/XXXXXXX.default Default=1
そこにfirefoxに認識させたいprofileを以下のように追記してあげます。
[General] StartWithLastProfile=0 [Profile0] Name=default IsRelative=1 Path=Profiles/XXXXXXX.default Default=1 [Profile1] Name=nightwatch IsRelative=0 Path=C:\hoge\puge\profiles\nightwatch
Nameはfirefoxのプロファイル選択画面で表示される名前であると同時に、nightwatch.jsonで指定するprofile名でもあります。
IsRelativeは0に。
Pathは絶対指定でOKです。
profileの選択画面を表示した時(win+R)に、追加したprofile名が追加されていれば成功です。
あとは先程と同様にnightwatchでprofile名を指定してあげればOKです。
ちなみに
base64でエンコードしたprofileのzipファイルが使えるとかネット上でちょくちょく見かけますが、自分の認識が違うのか使うことが出来ませんでした。
作成されたprofileディレクトリをそのままの状態で保存しておいて使えます。
参考
Nightwatch doesnt work with firefox with profile
Use a Custom Firefox profile with nightwatch.js selenium gecko driver
コメントを書く