ども。toshiです。
今回は、Web系テストといえばSelenium.
というわけで、Selenium 2.0 (WebDriver) を試してみたいと思います。
そもそもSeleniumといえば、FirefoxのSelenium-IDEを利用して、
画面を操作しながら、画面テストのシナリオを作成して、
レグレッションテストに利用するイメージです。
そのSleniumが今回の2.0では、WebDriver を統合し、
より強力なテストフレームワークとなったと。
もともとSelenium 1.0のときからSeleniumのコマンドをJava上から実行するための
APIはSelenium RCとして提供されていましたが、
このWebDriverを利用するとJavaからWeb画面が
より便利に操作できるようになってるみたいです。
とにかく、
SeleniumのHPには、WebDriverを試すサンプルが紹介されていますので
試してみましょう。
あ、WebDriverそのものは
Javaである必要はないのですが、これは私の好みです^^;
環境準備
環境準備は、eclipse上でプロジェクトを作成してjarを配置するだけです。
pom.xmlのサンプルがHPにもありますので、
環境はMavenを利用して準備します。
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>jp.seleniumtest</groupId> <artifactId>SeleniumTestPrj</artifactId> <version>1.0</version> <packaging>jar</packaging> <name>SeleniumTestPrj</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>2.2.0</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project>
pom.xmlを準備して、
mvn clean install
Firefoxでテストするサンプルを試してみる
WebDriverのjarを利用可能なeclipseプロジェクトができたら、
サンプルを動かしてみましょう。
package jp.seleniumtest; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.support.ui.ExpectedCondition; import org.openqa.selenium.support.ui.WebDriverWait; public class App { public static void main(String[] args) { WebDriver driver = new FirefoxDriver(); driver.get("http://www.google.com"); WebElement element = driver.findElement(By.name("q")); element.sendKeys("Cheese!"); element.submit(); System.out.println("Page title is: " + driver.getTitle()); (new WebDriverWait(driver, 30)).until(new ExpectedCondition<Boolean>() { public Boolean apply(WebDriver d) { return d.getTitle().startsWith("cheese!"); } }); System.out.println("Page title is: " + driver.getTitle()); driver.quit(); } }
それでは実行してみましょう。
mainを実行すると
Firefoxが起動してgoogleにアクセスしたところ。
おお、Firefox立ち上がりました。
コンソールには、以下のようにメッセージがでました。
Page title is: Google Page title is: cheese! - Google 検索
ちゃんと動いてますね。
WebDriverはIEでも動くよ。
では、IEでも動かしてみましょう。
DriverをIEに変えてあげればOKです。
package jp.seleniumtest; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.ie.InternetExplorerDriver; import org.openqa.selenium.support.ui.ExpectedCondition; import org.openqa.selenium.support.ui.WebDriverWait; public class App { public static void main(String[] args) { // ここのところでFirefoxからIEに切りかえます。 WebDriver driver = new InternetExplorerDriver(); // 以下は同じです。 driver.get("http://www.google.com"); WebElement element = driver.findElement(By.name("q")); element.sendKeys("Cheese!"); element.submit(); System.out.println("Page title is: " + driver.getTitle()); (new WebDriverWait(driver, 30)).until(new ExpectedCondition<Boolean>() { public Boolean apply(WebDriver d) { return d.getTitle().startsWith("cheese!"); } }); System.out.println("Page title is: " + driver.getTitle()); driver.quit(); } }
こちらも無事動きました。
ちなみに、最初にIEだと実行した際に、以下のメッセージが出て失敗しました。
Unexpected error launching Internet Explorer. Protected Mode must be set to the same value (enabled or disabled) for all zones.
これはインターネットオプション→セキュリティタブの設定で
すべてのゾーンで保護モードの設定を同じにすればOKでした。参考
まぁ、このサンプルではありがたみが少ないですが^^;
Javaで動かせるとなると、他の処理と組み合わせて実行できたりと便利ですね。