Webアプリケーションのテストなどで利用することが多い自動化ツールで、よく使われるプロダクトのひとつに「Selenium」があります。
このSelenium、2017年5月現在最新版はバージョン3で、その少し複雑な歴史からSelenium1,2,3が並立して存在している形になっていますが、今後はSelenium3の方に集約されていくことを考えると、今から始めるならSelenium3で開発したほうが良いのではないかと思います。
というわけでこの記事では、Selenium3を使ってブラウザを自動で操作する方法を解説します。なお、Seleniumでは多くの言語で自動化スクリプトを組めますが、今回はJavaを使用し、よく使われるEclipseで開発環境をセットアップします。
Selenium3によるブラウザの自動化の概要
はじめにSelenium3ではどのようにブラウザ操作の自動化を実現しているかを見てみましょう。
Selenium3では「WebDriver」というドライバを経由してブラウザを自動で操作します。
このWebDriverはFirefox、Chrome、IEやOperaなどブラウザごとに存在しており、各ブラウザをネイティブレベルで操作するためのWrapperのような役割を担っています。
この「WebDriver」を経由して操作(メソッドを呼び出す)することで、Javaなどのクライアントは、どのブラウザも同じような形式で操作することができるわけです。
WebDriverを呼び出すクライアントにはJavaをはじめ、PythonやPHP、C#など、主要なプログラミング言語がそろっていますので、開発者は得意な言語を使って自動化をおこなうことができます。
Selenium3をEclipseのプロジェクトに設定する
それでは、Javaの開発環境であるEclipseでSelenium3のクライアントを開発していくためのシンプルなプロジェクトを作成していきましょう。
はじめにEclipseを用意します。自分の環境に合ったEclipseをダウンロードしてください。
Javaをインスールします。Selenium3ではJDK1.8以上が必要です。
公式サイトに行き、Downloadページに行って“「Selenium Client & WebDriver Language Bindings」セクションのJavaのバインディングをダウンロードしてきます。
ダウンロードできたら、適当なディレクトリで解凍すればOKです。
「Third Party Drivers, Bindings, and Plugins」セクションに行き、対象のドライバをダウンロードして来ます。
ダウンロードしたら、これも適当なディレクトリに解凍すればOKです。
どこでもいいですが、先ほど解凍した「selenium-java」と同じディレクトリだとわかりやすいかもしれません。
FirefoxのWebDriverの場合
Firefoxなら「Mozilla GeckoDriver」のバージョンNoの方をクリックしてここに行き、自分の環境にあったバイナリをダウンロードします。今回は「geckodriver-v0.16.1-win64.zip」をダウンロードしました。
以前はFirefoxのみ、WebDriverが提供されておらず、言語バインディングに組み込まれていたため、ドライバをダウンロードして来なくてもデフォルトで使用できていましたが、それはすなわちNativeな呼び出しをSelenium2から直接行っていたということでした。Selenium3から、FirefoxもChromeと同じようにGeckoDriverというWebDriverを介してアクセスする方式になっています。
また、Ver47より、FirefoxはMarionetteという自動化ドライバを実装しており、GeckoエンジンやFirefoxを操作できるようになっています。Firefox用の「Mozilla GeckoDriver」はこのMarionetteと対話してオートメーションを実現してくれるのです。
ChromeのWebDriverの場合
Chromeなら「Google Chrome Driver」のバージョンNoの方をクリックしてここから自分の環境にあったドライバをダウンロードします。私はWin64bitだが、32bit版しかないので、「chromedriver_win32.zip」をダウンロードしてきました。
それぞれのWebDriverをダウンロードしたら、適当なディレクトリで解凍します。
ちなみに、解凍したら、exeが含まれており、それをダブルクリックするとDriverが起動することがを確認できます。起動してProxyサーバのように振る舞うのがWebDriverなのです。
では、ダウンロードして解凍したクライアント用の言語バインディングとWebDriverでEclipseのプロジェクトを作っていきましょう。
はじめに新しいJavaプロジェクトを作ります。
「MySelenium3」としました。
JDK1.8であることを確認します。
Jarをビルドパスに追加します。
「jarの追加」または「外部jarの追加」で、解凍したディレクトリにある「client-combined-3.4.0-nodeps.jar」と、libフォルダ配下のすべてのjarを追加します。
では、自動でブラウザを起動してサイトを訪問するコードをFirefoxとChromeで書いてみます。ブラウザによって少しコードが異なりますし、ブラウザはアップデートも頻繁で、特定のバージョンによってはエラーが出たりするので、それぞれ対処法が異なります。そのため、それぞれのブラウザごとに解説したいと思います。
- Selenium3によるFirefoxの自動操作(Java,Eclipseプロジェクト編)
- Selenium3によるChromeの自動操作(Java,Eclipseプロジェクト編)