Seleniumとは、Webアプリケーションのテスト自動化ツールである。自動的にGUIを操作したり、画面キャプチャを取ることができる。

デグレードが発生していないかを確認する回帰テストを、サポートするWebブラウザの種類やバージョン分、行うときに便利である。

Seleniumプロジェクトで開発されているテストツールには、いくつか種類がある。

Selenium IDE

Selenium IDEはユーザが手動で行ったWebアプリケーションの操作を記録し、その記録を自動的に再生することができるFirefoxプラグインである。

Selenium IDEのインストール

  1. SeleniumのWebサイト(http://docs.seleniumhq.org/ )をWebブラウザで開く。
  2. Downloadをクリックする。
    selenium site image
  3. (以下、Version 2.3.0の例を示す)Selenium IDE 2.3.0を選択する。
    selenium site image
  4. selenium-ide-2.3.0.xpi のダウンロードが始まる。
  5. Firefoxのメニュー[アドオン]を選択して、アドオンマネージャを表示する。
    selenium site image
  6. ダウンロードしたファイルをアドオンマネージャにドラッグ&ドロップする。
    selenium site image
  7. 「ソフトウェアのインストール」で「今すぐインストール」ボタンをクリックする。
    selenium site image
  8. Selenium IDE Ruby はFirefoxの再起動後にインストールされます。」と表示されるので、Firefoxを再起動する。
    selenium site image

Selenium IDEの使い方

  1. テストケースを作成したいWebアプリケーションをFirefoxで開く。
  2. Firefoxのメニューから[Web開発]-[Selenium IDE]を選択して、Selenium IDEを起動する。
    Selenium IDESelenium IDE
  3. Webブラウザ操作の記録
  4. テスト手順に従ってFirefoxで表示したWebページのリンクやボタンをクリックしていけば、Selenium IDE上でユーザの操作が記録される。
  5. テストケースの保存:Webアプリケーションに対する操作を一通り行い、テストケースを作成したらSelenium IDEの右上の赤色ボタンを押して記録を停止し、Selenium IDEの[ファイル]メニューからテストケースを保存する。

Selenium Serverのインストール

  1. SeleniumのWebサイト( http://docs.seleniumhq.org/ )をWebブラウザで開く。
  2. Downloadをクリックする。
  3. (以下、Version 2.35.0の例を示す)Selenium Server (formerly the Selenium RC Server) 2.35.0をクリックして保存する。
  4. selenium-server-standalone-2.35.0.jarのダウンロードが始まる。
  5. ダウンロードしたjarファイルを解凍する。
  6. コマンドプロンプトを開いて、Selenium Serverを解凍したフォルダに移動する。
  7. Selenium Serverを実行する。

Selenium Serverの実行方法

java -jar selenium-server-standalone-2.35.0.jar [-interactive] [option ...] -htmlSuite browser start_url suite_file result_file
browser
Webブラウザ
説明
*iexploreMicrosoft Internet Explorer
*firefoxMozilla Firefox
start_url
Webアプリケーションの開始URL
suite_file
テストスイートファイル
result_file
結果ファイル
java -jar selenium-server-standalone-2.34.0.jar -htmlSuite *firefox http://192.168.11.130 c:\tmp\test.html c:\tmp\result1.txt

Selenium Client & WebDriver Language Bindings

Selenium Client & WebDriver Language Bindingsとは、クライアント/サーバ型のテスト実行ツールである。WebDriverは、ブラウザの拡張機能やOSの機能を使ってブラウザを操作するライブラリである。WebDriverを使用するとJava、C#、Ruby及びPythonのプログラムからWebブラウザを操作できる。

Selenium Client & WebDriver Language Bindings (Java)のインストール

  1. SeleniumのWebサイト( http://docs.seleniumhq.org/ )をWebブラウザで開く。
  2. Downloadをクリックする。
  3. (以下、Version 2.35.0の例を示す)Selenium Client & WebDriver Language Bindings (Java) 2.35.0を選択する。
  4. zipファイルのダウンロードが始まる。
  5. ダウンロードしたzipファイルを解凍する。
    • selenium-2.35.0
      • libs
        • (各種jarファイル)
      • CHANGELOG
      • selenium-java-2.35.0.jar
      • selenium-java-2.35.0-srcs.jar
  6. selenium-java-2.35.0.jar及びlibsフォルダ下のjarファイルを CLASSPATH に設定する。

Firefoxを起動・終了するJavaプログラム

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class Exsample {
    public static void main(String[] args) {
        WebDriver driver = new FirefoxDriver();
        driver.get("http://itref.fc2web.com");
        driver.quit();
    }
}

Internet Explorerを起動・終了するJavaプログラム

Selenium Client & WebDriver Language BindingsをInternet ExplorerやChromeで使用する場合、それぞれのWebブラウザに対応したドライバが必要である(Firefoxはドライバ不要)。

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.ie.InternetExplorerDriverService;

public class Exsample {
    public static void main(String[] args) {
        System.setProperty(
            InternetExplorerDriverService.IE_DRIVER_EXE_PROPERTY,
            "C:\\tmp\\IEDriverServer.exe");
        WebDriver driver = new InternetExplorerDriver();
        driver.get("http://itref.fc2web.com");
        driver.quit();
    }
}

Internet ExplorerでSelenium WebDriverを使う場合、下記のセキュリティの設定が必要である。

  1. 「保護モードを有効にする」の設定をすべてのゾーン(インターネット、ローカルイントラネット、信頼済みサイト及び制限付きサイト)で統一する。
  2. 「信頼済みサイト」ゾーンにテスト対象のサイトを追加する。

上記のセキュリティ設定をしていない場合、テストプログラム実行時に以下のエラーが発生する。

Exception in thread "main" org.openqa.selenium.remote.SessionNotFoundException: Unexpected error launching Internet Explorer. Protected Mode settings are not the same for all zones. Enable Protected Mode must be set to the same value (enabled or disabled) for all zones. (WARNING: The server did not provide any stack trace information)

Internet Explorerのセキュリティ設定は[ツール]-[インターネットオプション]でインターネットオプション画面を開き、[セキュリティ]タブをクリックして設定する。

インターネットオプション

Chromeを起動・終了するJavaプログラム

Selenium Client & WebDriver Language BindingsをInternet ExplorerやChromeで使用する場合、それぞれのWebブラウザに対応したドライバが必要である(Firefoxはドライバ不要)。

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeDriverService;

public class Exsample {
    public static void main(String[] args) {
        System.setProperty(
            ChromeDriverService.CHROME_DRIVER_EXE_PROPERTY,
            "C:\\tmp\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.get("http://itref.fc2web.com");
        driver.quit();
    }
}

Firefoxを起動して画面のリンクをクリックするJavaプログラム

下記の例では、id属性から対象要素(WebElement)を取得している。

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import java.util.concurrent.TimeUnit;

public class Exsample
{
    public static void main(String[] args)
    {
        // Firefoxドライバ
        WebDriver driver = new FirefoxDriver();

        // ページを開く
        driver.get("http://itref.fc2web.com");

        // 待機時間を設定
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS)

        // 指定IDの要素をクリック
        driver.findElement(By.id("id1")).click();

        // ドライバを終了
        driver.quit();
    }
}

画面のキャプチャを撮る

File file = ((TakeScreenshot)driver).getScreenshotAs(OutputType.FILE);
try {
    FileUtils.copyFile(file, new File("c://test/capture.png"));
} catch (java.io.IOException e) {
    // 例外処理
}

ウィンドウを最大化する

driver.manage().window().mazsize();

Seleniumでベーシック認証のテストを行う

FirefoxやChromeでBASIC認証のテストを行うには、 driver.get("http://user:password@itref.fc2web.com"); のようにユーザ名とパスワードを指定する。ただし、ユーザ名とパスワードを入力するダイアログは表示されない。なお、Internet Explorerはセキュリティ上の理由により、この方法でBASIC認証はできない。

Seleniumのインタフェース

Seleniumのインタフェース
インタフェース説明
org.openqa.selenium.WebDriverWebブラウザをテストするためのインタフェース
org.openqa.selenium.WebElementHTML要素を表現するインタフェース
org.openqa.selenium.WebDriver.OptionsWebDriverのオプション
org.openqa.selenium.WebDriver.Window現在のウィンドウを表すインタフェース
org.openqa.selenium.WebDriver.Timeoutsタイムアウト時のWebDriverインスタンスの振る舞いを管理するインタフェース
org.openqa.selenium.TakesScreenshotスクリーンショットをキャプチャして保存するインタフェース

Seleniumのクラス

Seleniumのクラス
クラス説明
org.openqa.selenium.By文書内で要素の位置を表すクラス

org.openqa.selenium.WebDriver.Optionsインタフェース

メソッド説明
addCookie指定したクッキーを追加する。
deleteAllCookies現在のドメインのすべてのクッキーを削除する。
deleteCookieクッキーを削除する
deleteCookieNamed指定した名前のクッキーを削除する。
getCookieNamed指定した名前のクッキーを返す。
getCookie現在のドメインのクッキーをすべて返す。
imeIMEインタフェースを返す。
logsLogsインタフェースを返す。
timeoutsドライバのタイムアウトを管理するインタフェースを返す。
window現在のウィンドウを管理するインタフェースを返す。

timeouts

WebDriver.Timeouts timeouts()

ドライバのタイムアウトを管理するためのインタフェースを返す。

window

WebDriver.Window window()

org.openqa.selenium.WebDriver.Windowインタフェース

メソッド説明
getPosition現在のウィンドウの位置を返す。
getSize現在のウィンドウの位サイズを返す。
maximize現在のウィンドウを最大化する。
setPosition現在のウィンドウの位置をセットする。
setSize現在のウィンドウのサイズをセットする。

maximize

現在のウィンドウが既に最大化されていなければ最大化する。

void maximize()

WebDriver.Timeoutインタフェース

WebDriverインスタンスのタイムアウトの動作を管理するためのインタフェース。

implicitlyWait

要素を検索するときに、要素が存在しなかった場合にドライバが待機する時間を指定する。

WebDriver.Timeouts implicitlyWait(long time, java.util.concurrent.TimeUnit unit)

time
待機時間
unit
時間の単位

org.openqa.selenium.TakesScreenshotインタフェース

メソッド説明
getScreenshotAsスクリーンショットをキャプチャして、指定したロケーションに保存する。

getScreenshotAs

<X> X getScreenshotAs(OutputType<X> target)

org.openqa.selenium.OutputType<T>インタフェース

フィールド説明
static OutputType<java.lang.String> BASE64
static OutputType<byte[]> BYTES
static OutputType<java.io.File> FILE

org.openqa.selenium.support.ui.Selectクラス

メソッド説明
deselectAllすべての選択状態をクリアする。
deselectByIndex指定したインデックス番号の選択をクリアする。
deselectByValue指定した値(value属性の値)の選択をクリアする。
deselectByVisibleText指定した表示テキストの選択をクリアする。
selectByIndex指定したインデックス番号を選択する。
selectByValue指定した値(value属性の値)を選択する。
selectByVisibleText指定した表示テキストを選択する。
Select select = new Select(driver.findElement(By.tagName("select")));
select.selectByVisibleText("選択肢1");
スポンサーリンク