WebDriver
Selenium
Selenide

SelenideでWebDriverManagerを使う

はじめに

この記事はSelenium/Appium Advent Calendar 2017の3日目です。

2017/09/30にリリースされたSelenide4.7のリリースノートをみると、WebDriverManagerが組み込まれたという風に書かれています。つらつらと読んでいくと、どうやら各ブラウザ毎のWebDriver実装を勝手にとってきてつかえるようにしてくれる模様。
もしそうならば、今まで手順書にバイナリダウンロードして適切なパスに配置して、テストコードのこのパス部分を修正して……という手間が省けますし、また何よりJavaのコードだけで完結させることができます。

リリースから少し時間があいてしまいましたが、この機能を試してみましょう。

WebDriverManager とは

そもそもWebDriverManagerとはどういったものでしょうか。
公式サイトをみると、「はじめに」に書いたようなことをやってくれそうな雰囲気です。日本の情報では、WebDriverManagerを使用してgeckodriver(SeleniumのWebDriver)を自動インストールする方法があるので参考になります。

SelenideでのWebDriverManagerの使い方

さて、SelenideではどうやってWebDriverManagerを使うのでしょうか。
リリースノートを見ると、以下の用に書かれています。

There is one nuance. WebDriverManager will only work if:
1. You use one of supported webdrivers: chrome, edge, internet explorer, opera, phantomjs, marionette or gecko.
2. Your code hasn’t set system property webdriver.chrome.driver, webdriver.edge.driver, webdriver.ie.driver, webdriver.opera.driver, phantomjs.binary.path or webdriver.gecko.driver.

Chrome、Edge、IE、Opera、PhantomJS、Marionetto/Geckoがサポートされていること、通常では行わなければならないWebDriverのバイナリパスのシステムプロパティ設定をしなくてよいとあります。
その後に以下のようにもあります。

If you still have some question, remember that the only true information source is the SOURCE CODE!

ということなのでソースコードも読んでみましょう。そうすると、isChromeisEgdeなどの使用するブラウザ毎に内部でWebDriverManagerを呼び出して初期化(HogeDriverManager.getInstance().setup())が行われています。
では、このisChromeisEgdeは何をもって判断しているのかというと、Selenideに対して使用するブラウザを伝えてためのConfiguration.browser変数です。つまり、Configuration.browserでブラウザを指定するだけで後はよきに計らってくれるということです。

サンプルソース

以下にWebDriverManagerの使用前/使用後を並べてみました。
行数としては1行しか減っていませんが、本来必要なバイナリのダウンロードとバイナリ位置に応じてパスの書き換えが不要となっていることが大きいです。

Before

    @Before
    public void before(){
        Configuration.browser = WebDriverRunner.GECKO;
        System.setProperty("webdriver.gecko.driver","/PATH/TO/geckodriver.exe");
    }

After

    @Before
    public void before(){
        Configuration.browser = WebDriverRunner.GECKO;
    }

GitHub

以前書いたCodezineの記事で使用したコードに対して、修正したものをあげておきました。
バイナリダウンロードなどの事前準備作業がいらなく、GitHubからクローンしてそのまま使えるようになっているのが便利ですね。

おわりに

Selenideに組み込まれたWebDriverManagerについて簡単に説明しましたがいかがだったでしょうか。コード行数は大して減りませんが、個々人の環境設定の労力がなくなり複数人で開発する際のトラブルを防ぐことが出来るはずです。
便利な機能ですし導入も簡単なので皆さん積極的に使っていきましょう。