【Nightwatch.js】firefoxで認証プロキシを越えてテストする方法

【Nightwatch.js】firefoxで認証プロキシを越えてテストする方法

現状

社内で外部ネットワークにアクセスする時に、認証プロキシを設定している場合があります。
そうすると、firefoxに限らず、ブラウザでプロキシを通過する際に、IDとパスワードを聞かれます。
普段使用しているときは都度手動で入力すれば外部に接続できるのですが、ブラウザのテスト自動化になると話が少し変わってきます。

自動でテストが実行されるのですが認証プロキシが通過できなくて処理が終了してしまいます。
認証プロキシを自動で通過させる必要があります。

firefoxについて調べてみたのですが、profilesに認証プロキシを指定する場所はあっても、自動で通過できるようにパスワードなどを保存しておく方法が無いです。
またブラウザテストの自動化にNightwatchを使用しているのですが、nightwatch.jsonでproxyを指定してgeckodriverに渡すような記述がstackoverflowだったりissueにあったりするのですが、動作しませんでした。
Set proxy in nightwatch.js
Setting proxy selenium server wont start

ということで、どうにかして自動で通過できないかと試行錯誤した結果、通過することが出来たのでまとめておきます。
本当はNightwatchやfirefoxのprofiesについての設定だけで収まるならいいのかもしれませんが、どうしても通過できないときの代替案として。

解決策

私の答えは「プロキシサーバを自前で立てて認証プロキシをプロキシサーバから自動認証させてやる」でした。

方法

HttpProxyAuth

今回自前でプロキシを立てるにあたって、フリーツールであるHttpProxyAuthを使用しました。
HTTPプロキシ認証中継ツール(HttpProxyAuth)

コマンドプロンプトからHttpProxyAuth.exeを起動するだけのシンプルなツールです。分かりやすくていいですね。
使い方はzipに同梱されているReadMe.txtにも書いてあるのですが、
認証プロキシの情報と自分の立ち上げるサーバポートを指定するだけです。

今回図のようにportを28080で立ち上げると以下のようにコマンドプロンプトで実行させます。

HttpProxyAuth.exe "user:pass@ProxyName:Port" 28080

これをbatファイルで包んでwindowsのサービスに登録して自動起動にしてもいいと思います。

firefox

オプション→ネットワークプロキシ→接続設定→「手動でプロキシを設定する」と「すべてのプロトコルでこのプロキシを使用する」にチェックを入れます。
HttpProxyAuthで立ち上げたプロキシを指定します。

備考

テストの自動化以外にも「ブラウザからアクセスする時に毎回IDとパスワード聞かれるのが面倒」とか、
「このツール認証プロキシの対応されてなくて外部にアクセスできない」とかの対応にもいいですね。
考え方によってはIDやパスワードなどの情報をブラウザに設定しないほうがブラウザの設定を汚さなくて良いということもありそうですね。

参考

HttpProxyAuthについて詳しい記事
認証プロキシに悪戦苦闘したエンジニアの手記

nightwatch.jsカテゴリの最新記事