Selenium 3.0.1 × Gecko Driver 0.14.0で最新のFirefox 51.0.1を動かしてみた

QUES TECH

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