Selenium WebDriverでクライアント証明書を使う

2016/06/25

selenium-2.46.0、IE8を使用。

Selenium WebDriverでクライアント証明書を使う時の問題を解決する。
1)IEではWindows セキュリティのポップアップを制御できない問題
2)ブラウザなしで動作するHtmlUnitDriverでは、クライアント証明書を設定する機能がない問題

【解決策】
1)AWTを使って力ずくでEnterを押す。
WebDriverがポップアップを認識できないという問題、また画面上でOKを押すまでWebDriverから通信の応答が返らない(= new InternetExplorerDriverが終わらない)という問題に対応するため、非同期にAWTを使ってEnterキーを押下する。
ソースコードのpressEnterAsynchronously()を参照。

2)HtmlUnitDriverクラスを拡張して、SSLクライアント認証の機能をつける。
HtmlUnitDriverはWebClientというブラウザを模したオブジェクトを所有しており、WebClientOptionsというオプションによってJavaScriptを有効にするなど、ブラウザの設定が制御できる。
WebClientOptionsは元々setSSLClientCertificate()というクライアント証明書を設定するメソッドを持っているため、HtmlUnitDriverからsetSSLClientCertificate()を呼べるようにするだけで良い。
今回はコンストラクタで設定できるように拡張した。

-Java, Windows
-