【Selenium】色んなブラウザを動かす(PC編)
Seleniumの各ブラウザ対応
Selenium 1.0ではクライアントサイドJavaScriptの実行によりブラウザを操作していましたが、Selenium 2.0 WebDriverでは各ブラウザのAPIを呼び出すことで操作を行います。そのため、SeleniumがリリースしているWebDriverのライブラリだけではフルブラウザ対応できません。
org.openqa.selenium.WebDriverというインターフェースに関して各ベンダーもしくはどこぞの親切な人が実装を提供しているので、そちらをセットアップする必要が有ります。今回はいくつか提供されているその実装のうち、Google Chrome, Internet Explorerのものを紹介していきます。
合わせて読みたい
- 作者: Satya Avasarala,Sky株式会社玉川竜司
- 出版社/メーカー: オライリージャパン
- 発売日: 2014/09/18
- メディア: 大型本
- この商品を含むブログ (3件) を見る
ちょっと補足
Selenium以外に必要なライブラリは下記の2パターンあります。
org.openqa.selenium.WebDriverインターフェースの実装
FirefoxDriverやChromeDriverのように実装自体がSelenium WebDriverに含まれているものもありますが、ios-driverのように3rdパーティーライブラリもあります。その場合は、Javaのビルドパスの解決からしなければいけません。
各ブラウザのAPIを実行するための実行ファイル
Javaのビルドパスの解決に加えて、各プラットフォーム向けの実行ファイルをセットアップする必要があります。
Selenium WebDriverおさらい
ここで、ちょっとWebDriver自体のおさらいをします。
セットアップ
Mavenプロジェクトの場合、下記のdependencyをpom.xmlに追加します。
<dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>2.45.0</version> </dependency>
Jarで直接指定する場合は、ダウンロードページからselenium-javaのzipをダウンロードし、selenium-java-x.x.x.jarを利用します。libs配下には、selenium-javaが依存するjarが同梱されています。
FirefoxDriver
実際にブラウザを動かすには、下記のようにFirefoxDriverを利用してWebDriverのインスタンスを作ります。FirefoxDriverはプラットフォーム内にFirefoxがインストールされているだけで利用可能です。このコードでは、Firefoxが起動してGoogleのトップページを表示します。
import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; public class FirefoxTest { public static void main(String[] args){ WebDriver driver = new FirefoxDriver(); driver.get("https://www.google.co.jp/"); driver.quit(); } }
RemoteWebDriver
ブラウザがインストールされているプラットフォームとテストコードを実行するプラットフォームが分かれている場合は、RemoteWebDriverを利用します。仕組みとしては、ブラウザがインストールされているプラットフォームにSelenium Serverを立て、テストコードからRemoteWebDriverを通してHTTP通信にてブラウザをリモート操作します。
1. Selenium Server
ブラウザがインストールされているプラットフォームにSelenium Serverを立てます。ダウンロードページからselenium-server-standalone-x.x.x.jarをダウンロードし、コマンドラインから起動します。
java -jar selenium-server-standalone-x.x.x.jar
2. RemoteWebDriver
org.openqa.selenium.remote.RemoteWebDriverクラスを通して、WebDriverのインスタンスを作ります。RemoteWebDriverのコンストラクタ第一引数には、Selenium ServerのURLを、第二引数にはブラウザの種類を指定します。
import java.net.MalformedURLException; import java.net.URL; import org.openqa.selenium.WebDriver; import org.openqa.selenium.remote.DesiredCapabilities; import org.openqa.selenium.remote.RemoteWebDriver; public class FirefoxRemoteTest { public static void main(String args[]) throws MalformedURLException{ DesiredCapabilities firefox = DesiredCapabilities.firefox(); WebDriver driver = new RemoteWebDriver(new URL("http://x.x.x.x:4444/wd/hub"), firefox); driver.get("https://www.google.co.jp/"); driver.quit(); } }
参考
Google Chrome
ここからは、デフォルトのFirefoxDriver以外を紹介していきます。 まずは、Google Chromeを操作するためのChromeDriverです。
ChromeDriver
Google Chromeを動作させるためのライブラリです。org.openqa.selenium.chrome.ChromeDriverというJavaの実装自体は、seleniumに同梱されているので、プロジェクトに依存関係を追加する必要はありません。
1. 実行ファイルのインストール
Google ChromeのAPIを実行するための実行ファイルをこちらからダウンロードします。
2. システムプロパティ webdriver.chrome.driverの指定
実行ファイルのインストールパスをシステムプロパティ webdriver.chrome.driverで指定します。指定できていれば、あとはGoogle Chromeがプラットフォームにインストールされていれば、利用可能です。
import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class ChromeTest { public static void main(String args[]){ System.setProperty("webdriver.chrome.driver", "/Users/xxxx/Downloads/chromedriver"); WebDriver driver = new ChromeDriver(); driver.get("https://www.google.co.jp/"); driver.quit(); } }
ブラウザバージョンとの組み合わせに関して
ChromeDriverの実行ファイルは、ご利用のGoogle Chromeのバージョンに合わせて適切な組み合わせを選ぶ必要が有ります。また、Google Chrome自体は自動アップデートしていくので、開発環境のChromeDriverも追随していく必要が有ります。
Google Chromeのバージョンとの組み合わせは、実行ファイルのダウンロードページのnotes.txtに記載されています。最新のGoogle Chrome 43をサポートするChromeDriver実行ファイルは2.15です。
リモート実行
RemoteWebDriverを利用してリモートで実行するには、Selenium Serverの起動時にChromeDriverの実行ファイルパスを指定する必要があります。
java -jar selenium-server-standalone-x.x.x.jar -Dwebdriver.chrome.driver=/Users/xxxx/Downloads/chromedriver
サンプルコード
import java.net.MalformedURLException; import java.net.URL; import org.openqa.selenium.WebDriver; import org.openqa.selenium.remote.DesiredCapabilities; import org.openqa.selenium.remote.RemoteWebDriver; public class ChromeTest { public static void main(String args[]) throws MalformedURLException{ DesiredCapabilities chrome = DesiredCapabilities.chrome(); WebDriver driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), chrome); driver.get("https://www.google.co.jp/"); driver.quit(); } }
参考
Internet Explorer
InternetExplorerDriver
Internet Explorerを動作させるためのライブラリです。org.openqa.selenium.ie.InternetExplorerDriverというJavaの実装自体は、seleniumに同梱されているので、プロジェクトに依存関係を追加する必要はありません。
1. 実行ファイルのインストール
Internet ExplorerのAPIを実行するための実行ファイルをこちらからダウンロードします。
2. システムプロパティ webdriver.chrome.driverの指定
実行ファイルのインストールパスをシステムプロパティ webdriver.ie.driverで指定します。指定できていれば、あとはInternet Explorerがプラットフォームにインストールされていれば、利用可能です。
import org.openqa.selenium.WebDriver; import org.openqa.selenium.ie.InternetExplorerDriver; public class IETest { public static void main(final String[] args) { System.setProperty("webdriver.ie.driver", "C://Users/xxxx/Downloads/IEDriverServer_x64_2.45.0/IEDriverServer.exe"); final WebDriver driver = new InternetExplorerDriver(); driver.get("https://www.google.co.jp/webhp?hl=ja"); driver.quit(); } }
リモート実行
RemoteWebDriverを利用してリモートで実行するには、Selenium Serverの起動時にInternetExplorerDriverの実行ファイルパスを指定する必要があります。
java -jar selenium-server-standalone-x.x.x.jar -Dwebdriver.ie.driver=C://Users/xxxx/Downloads/IEDriverServer_x64_2.45.0/IEDriverServer.exe
サンプルコード
import java.net.MalformedURLException; import java.net.URL; import org.openqa.selenium.WebDriver; import org.openqa.selenium.remote.DesiredCapabilities; import org.openqa.selenium.remote.RemoteWebDriver; public class IETest { public static void main(final String[] args) throws MalformedURLException { final DesiredCapabilities internetExplorer = DesiredCapabilities.internetExplorer(); final WebDriver driver = new RemoteWebDriver(new URL("http://x.x.x.x:4444/wd/hub"), internetExplorer); driver.get("https://www.google.co.jp/webhp?hl=ja"); driver.quit(); } }