
こんにちは。ヒューマンクレスト山口です。
Seleniumを使用したブラウザの自動テストを行っている方は、既にご存知かと思いますがFirefox47より、Gecko Driverを使用しないと動作させることができなくなりました。
今回は、GeckoDriverを使用する際の変更点と現状についてまとめます。
■環境①
PC:MAC OSX 10.12.1
Java 1.8
Selenium 3.0.1
Gecko Driver 0.14.0
■環境②
PC:Windows8.1
Java 1.8
Selenium 3.0.1
Gecko Driver 0.14.0
■GeckoDriverを使用する際の変更点
まずは、書き方の変更点を記載します。
見てお分かりになると思いますが、Gecko Driverを指定すれば最新のFirefoxで動作します。
ChromeやIE・Edgeの書き方と同様です。
今までの書き方
@Test
public void TestBefore() throws Exception {
WebDriver driver;
driver = new FirefoxDriver();
driver.get("https://www.seleniumhq.org/");
driver.quit();
}
変更後の書き方(Gecko Driverが必要になりました)
@Test
public void TestAfter() throws Exception {
WebDriver driver;
System.setProperty("webdriver.gecko.driver", "Driver Path");
driver = new FirefoxDriver();
driver.get("https://www.seleniumhq.org/");
driver.quit();
}
※環境変数にDriverのPathを設定すると上記設定は不要になります。
■現状(2017/02/06)
次にMacとWindowsで、代表的なキーワードの動作差異について表にまとめました。
大きな違いは、ドライバーを閉じる動作がWindowsだとアプリケーションエラーとなることです。
また、共通で動かない箇所として、actionなどがあります。
| Mac OSX | Windows 8.1 | |
| driver.get | ◯ | ◯ |
| driver.quit | ◯ | △(※1 アプリケーションエラー) |
| click | ◯ | ◯ |
| sendkey | ◯ | ◯ |
| alert | ◯ | ◯ |
| action | ✕(※2 動作しない) | ✕(※2 動作しない) |
※1 UnitTest上Seleniumのエラーにはなりませんが、Firefox.exeがエラーを吐きます
※2 actionに関しては、現状動作させることはできませんが、一部sendkeyで代用しています。
例)
@Test
public void TestAfter() throws Exception {
WebDriver driver;
System.setProperty("webdriver.gecko.driver", "Driver Path");
driver = new FirefoxDriver();
driver.get("https://www.seleniumhq.org/");
Thread.sleep(2000);
//動作不可
//Actions act = new Actions(driver);
//act.sendKeys(Keys.PAGE_DOWN).perform();
//動作可能
driver.findElement(By.cssSelector(".homepage.push")).sendKeys(Keys.PAGE_DOWN);
Thread.sleep(2000);
driver.quit();
}
■最後に
今回はSeleniumとFirefoxのバージョンアップについて、OS毎に動作の違いをまとめました。
Seleniumのよく使うキーワードはアップデート毎に確認しています。
Alertについても動作しないと思っていましたが、待ち時間を入れることで動作させることができました。
このようなオープンソースの変更があった際に、自動テストを保守していくのは大変ですが、常に最新の情報を追うことが大切だと改めて感じました。
