Selenium

Seleniumとは、Webアプリケーションのテスト自動化ツールである。自動的にGUIを操作したり、画面キャプチャを取ることができる。デグレードが発生していないかを確認する回帰テストを、サポートするWebブラウザの種類やバージョン分、行うときに便利である。

目次

  1. Selenium IDE
    1. Selenium IDEのインストール
    2. Selenium IDEの使い方
  2. Selenium Server
    1. Selenium Serverのインストール
    2. Selenium Serverの実行方法
  3. Selenium Client & WebDriver Language Bindings
  4. プログラムの例
    1. Firefoxを起動・終了するJavaプログラム
    2. Internet Explorerを起動・終了するJavaプログラム
    3. Chromeを起動・終了するJavaプログラム
    4. Firefoxを起動して画面のリンクをクリックするJavaプログラム
    5. ブラウザ画面のキャプチャ(スクリーンショット)を撮るJavaプログラム
    6. ウィンドウを最大化する
    7. Seleniumでベーシック認証のテストを行う
  5. インタフェース
    1. OutputType<T>
    2. TakesScreenshot
    3. WebDriver
    4. WebElement
  6. Seleniumのクラス
    1. org.openqa.selenium.support.ui.Select
  7. 相互リンク

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

Selenium IDEとは

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

Selenium IDEのインストール

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

Selenium IDEの使い方

  1. テストケースを作成したいWebアプリケーションをFirefoxで開く。
  2. Firefoxのメニューから[Web開発]-[Selenium IDE]を選択して、Selenium IDEを起動する。
    Selenium IDE
    Figure 7. Selenium 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ファイルを解凍する。
  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のセキュリティ設定は[ツール]-[インターネットオプション]でインターネットオプション画面を開き、[セキュリティ]タブをクリックして設定する。

インターネットオプション
Figure 8. インターネットオプション

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();
  }
}

ブラウザ画面のキャプチャ(スクリーンショット)を撮るJavaプログラム

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.By文書内で要素の位置を表すクラス

TakesScreenshot

org.openqa.selenium.TakesScreenshot インタフェースには次に示すメソッドがある。

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

getScreenshotAs

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

OutputType<T>

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");

相互リンク

SE学院と相互リンクさせていただいているサイトをご紹介します。

エンジニアリングを進化させる品質メディア:Sqripts

「Sqripts」は、システム開発における「Quality(品質)」に関する情報をエンジニアが”理解しやすい「Script」に変換して伝えたいという想いから生まれた"エンジニアリングを進化させる品質メディア"です。QAエンジニア、ソフトウェアエンジニアなど、品質に関わるすべての人にとっての情報収集としてぜひご活用ください。