Webアプリケーションの自動テストツールSeleniumを試すシリーズ。
今回は Internet Explorer を立ち上げてからのテスト起動までを行ってみたいと思います。
OS/ブラウザのバージョン
検証に使用したのは、IE11, Windows 10 Home 64 bit 。EclipseはOxygenです。
まずはWeb Driverのダウンロード。https://www.seleniumhq.org/download/から最新のjavaのWebDriverをダウンロードし、解凍します。
Eclipseの細かい設定については、他のブラウザを使用する場合も同じです。こちらを参照してください。
実行コード
mainメソッドで次のコードを書きます。テスト対象として使わせていただいたページは、ChromeやFirefoxのときと同じく、日本Seleniumユーザコミュニティが提供してくれているサンプルWebページです。
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class Sample { public static void main (String[] args) { WebDriver driver = new InternetExplorerDriver(); driver.get("http://example.selenium.jp/reserveApp"); driver.findElement(By.id("goto_next")).click(); driver.quit(); } }
エラーの発生と解決方法
このコードを実行すると、次のエラーが出てしまいました。
Exception in thread “main” java.lang.IllegalStateException: The path to the driver executable must be set by the webdriver.ie.driver system property; for more information, see https://github.com/SeleniumHQ/selenium/wiki/InternetExplorerDriver. The latest version can be downloaded from http://selenium-release.storage.googleapis.com/index.html
Windows版のIE Driverを取得し、system propertyでセットせよと言われている様子です。
メッセージに出ているhttp://selenium-release.storage.googleapis.com/index.htmlへアクセスし、この時点で最新の3.9をクリックします。
最新のIEDriverServer_x64_3.9.0.zipをダウンロードし解凍しておきます。
zipファイルをCドライブ直下に解凍し、先ほどのコードに以下の一行を加えます。
System.setProperty("webdriver.id.driver", "C:\\IEDriverServer_x64_3.9.0\\IEDriverServer.exe");
コードの修正と再実行
コードの全体を改めて表示すると、以下の状態になります。
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class Sample { public static void main (String[] args) { System.setProperty("webdriver.ie.driver", "C:\\IEDriverServer_x64_3.9.0\\IEDriverServer.exe"); WebDriver driver = new InternetExplorerDriver(); driver.get("http://example.selenium.jp/reserveApp"); driver.findElement(By.id("goto_next")).click(); driver.quit(); } }
再び実行。今度は
Exception in thread “main” org.openqa.selenium.WebDriverException: java.net.ConnectException: Failed to connect to localhost/0:0:0:0:0:0:0:1:8632
というエラーが出てしまいました。。
3.9は不安定か?と思い、試しに3.8をトライ。
諦めずに再度実行。
Exception in thread “main” org.openqa.selenium.SessionNotCreatedException: Unexpected error launching Internet Explorer. Protected Mode settings are not the same for all zones. Enable Protected Mode must be set to the same value (enabled or disabled) for all zones.
“Protected Mode settings are not the same for all zones.”とあるように、IE上でセキュリティの保護モードを同じにしなければならない様です。
IEの「インターネットオプション」から「セキュリティ」タブを開きます。
ここにある「インターネット」「ローカルイントラネット」「信頼済みサイト」「制限付きサイト」の全てで「保護モードを有効にする」チェックを入れました。
コードを実行すると、今度は動きました!が、ブラウザが自動で閉じません・・・
これを回避するには、レジストリをいじらなければならない様子。レジストリエディタにアクセスし
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Internet Explorer\Main\FeatureControl 下に FEATURE_BFCACHE というキーを新規に作成し、
さらにそこにiexplore.exeというDWORD値を0で作成する必要があります。
レジストリ操作を間違えるとコンピュータが動かなくなる可能性があるので、慎重に・・・!
この辺りは、Qiitaにも記事があります。https://qiita.com/takky/items/4c22d68dd7c48cf6d92c
再び実行。今度はOKでした。IEが自動で立ち上がり、ブラウザも自動で閉じて終了します。