Seleniumとは、Webアプリケーションのテスト自動化ツールである。自動的にGUIを操作したり、画面キャプチャを取ることができる。デグレードが発生していないかを確認する回帰テストを、サポートするWebブラウザの種類やバージョン分、行うときに便利である。
Seleniumプロジェクトで開発されているテストツールには、いくつか種類がある。
Selenium IDEはユーザが手動で行ったWebアプリケーションの操作を記録し、その記録を自動的に再生することができるFirefoxプラグインである。
http://docs.seleniumhq.org/
)をWebブラウザで開く。selenium-ide-2.3.0.xpi
のダウンロードが始まる。
http://docs.seleniumhq.org/
)をWebブラウザで開く。
java -jar selenium-server-standalone-2.35.0.jar [-interactive] [option ...] -htmlSuite browser start_url suite_file result_file
値 | 説明 |
---|---|
*iexplore | Microsoft Internet Explorer |
*firefox | Mozilla Firefox |
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とは、クライアント/サーバ型のテスト実行ツールである。WebDriverは、ブラウザの拡張機能やOSの機能を使ってブラウザを操作するライブラリである。WebDriverを使用するとJava、C#、Ruby及びPythonのプログラムからWebブラウザを操作できる。
http://docs.seleniumhq.org/
)をWebブラウザで開く。
selenium-2.35.0
libs
CHANGELOG
selenium-java-2.35.0.jar
selenium-java-2.35.0-srcs.jar
CLASSPATH
に設定する。
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();
}
}
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を使う場合、下記のセキュリティの設定が必要である。
上記のセキュリティ設定をしていない場合、テストプログラム実行時に以下のエラーが発生する。
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のセキュリティ設定は[ツール]-[インターネットオプション]でインターネットオプション画面を開き、[セキュリティ]タブをクリックして設定する。
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();
}
}
下記の例では、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();
FirefoxやChromeでBASIC認証のテストを行うには、次のようにユーザ名とパスワードを指定する。
driver.get("http://user:password@itref.fc2web.com");
ただし、ユーザ名とパスワードを入力するダイアログは表示されない。なお、Internet Explorerはセキュリティ上の理由により、この方法でBASIC認証はできない。
クラス | 説明 |
---|---|
org.openqa.selenium.By | 文書内で要素の位置を表すクラス |
org.openqa.selenium.TakesScreenshot インタフェースには次に示すメソッドがある。
<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 |
メソッド | 説明 |
---|---|
deselectAll | すべての選択状態をクリアする。 |
deselectByIndex | 指定したインデックス番号の選択をクリアする。 |
deselectByValue | 指定した値(value属性の値)の選択をクリアする。 |
deselectByVisibleText | 指定した表示テキストの選択をクリアする。 |
selectByIndex | 指定したインデックス番号を選択する。 |
selectByValue | 指定した値(value属性の値)を選択する。 |
selectByVisibleText | 指定した表示テキストを選択する。 |
Select select = new Select(driver.findElement(By.tagName("select")));
select.selectByVisibleText("選択肢1");
SE学院と相互リンクさせていただいているサイトをご紹介します。
「Sqripts」は、システム開発における「Quality(品質)」に関する情報をエンジニアが”理解しやすい「Script」に変換して伝えたいという想いから生まれた"エンジニアリングを進化させる品質メディア"です。QAエンジニア、ソフトウェアエンジニアなど、品質に関わるすべての人にとっての情報収集としてぜひご活用ください。