こんにちは。ヒューマンクレスト山口です。
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についても動作しないと思っていましたが、待ち時間を入れることで動作させることができました。
このようなオープンソースの変更があった際に、自動テストを保守していくのは大変ですが、常に最新の情報を追うことが大切だと改めて感じました。