ユニット戦隊テスティンガー!!Web Driverによるクロスブラウザテストの実行
前回のあらすじ
テスティングレッドのスミハラタツヤによって、Selenium(光線)の解説している最中に、
デグレード将軍が現れた。 デグレード将軍は、デグレード範囲拡大攻撃を行ったのであった。
テスティングレッドの攻撃(デバッグ)も虚しく、デグレード範囲が広がりを見せつつ合った時、
テスティングレッドは、Selenium-IDEを利用した人海戦術により、見事デグレード将軍を倒したのであった。。。
Web Driverによるクロスブラウザテストの実行
レッド 「前回はSelenium-IDEのお陰でデグレード将軍を倒せたが、このままではいつか敗れる日がくるかもしれない・・・」
タッキ博士「レッド!」
レッド 「ん?その声は・・・タッキ博士!?」
タッキ博士「どうしたんじゃ、そんな難しい顔をして」
レッド 「タッキ博士、このままでは悪の軍団デスマーチにいつか敗れてしまうのではないでしょうか。。。」
タッキ博士「ぶはははは、そんな事で落ち込んでおるのか?」
レッド 「そんな事って!前回の戦い・・」
タッキ博士「お主は何にも知らないようじゃの。よし、わしが本当のSeleniumを教えてやろう」
レッド 「本当のSelenium?」
タッキ博士「そうじゃ、まずは最新兵器(Selenium2)のSelenium WebDriverについてじゃ!」
特徴
最新兵器であるSelenium2には、ブラウザテストを行うためのインターフェイスとして、環境適応設定(WebDriverインターフェイス)がある。 また、環境適応設定(WebDriverインターフェイス)を実装した、陸海空モード(各種ブラウザのWebDriver具象クラス)が存在する。 実行するブラウザごとに陸海空モード(具象クラス)を変更することで、同一コードで複数のブラウザテストに対応できるのじゃ。
レッド 「す、すごい・・・じゃあ、早速・・」
タッキ博士「まぁ待て、落ち着くんじゃ。まずはWebDriverを利用する環境作りじゃ。」
環境構築の手順
このサンプルでは、MavenとEclipseを利用する。
※MavenとEclipseのダウンロードと設定は事前に行っているものする。
まずは、下記のコマンドを実行し、Maveプロジェクトを作成する。
1 |
mvn archetype:create -DgroupId=sample.selenium -DartifactId=selenium-sample -DarchetypeArtifactId=maven-archetype-quickstart |
次に、自動生成されたpom.xmlのdependencies要素として下記を追加する。
Junit3の記述がある場合は削除する。
[pom.xmlのdependencies]
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>2.31.0</version> </dependency> </dependencies> |
Eclipseのworkspaceで、初めてMavenで利用する場合は、下記のコマンドを実行し、Eclipseのクラスパス変数にM2_REPOを追加する。
workspaceがまだ作成されていない場合は、一度Eclipseを起動しworkspaceを作成しておく。
1 |
mvn eclipse:add-maven-repo -Declipse.workspace=<workspaceの絶対パス> |
Eclipseのプロジェクトに変換する。
pom.xmlがあるディレクトリへ移動し、次のコマンドを実行する。
1 |
mvn eclipse:eclipse |
Eclipseプロジェクトに変換後、Eclipseから
「ファイル」→「インポート」→「既存プロジェクトをワークスペースへ」
でインポートする。
タッキ博士「これで準備は万全じゃ。陸(IE) 海(Firefox) 空(Chrome) のどんな環境であろうともテストができるぞい。」
レッド 「は、はい。それじゃ、ついに使うんですね!?」
タッキ博士「では使ってみるかのー。」
実装サンプル
タッキ博士「まずは、環境適応設定(WebDriver)を海モード(FirefoxDriver)にセットしてっと・・・」
タッキ博士「Googleで”test”文字列を検索でもしてみようかのー」
FirefoxでGoogleにアクセスし、「test」文字列を自動入力、検索結果画面表示
JUnitのソースを作成する。
テンプレートとして用意されている、AppTestクラスのtestAppメソッドを、以下のように書き換える。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
public void testApp() { // FirefoxでGoogleを開く WebDriver driver = new FirefoxDriver(); driver.get("https://www.google.co.jp"); // 入力フォームにtestを入力し検索ボタンを押下する new WebDriverWait(driver, 10).until(ExpectedConditions.titleIs("Google")); WebElement searchBox = driver.findElement(ById.id("gbqfq")); WebElement searchButton = driver.findElement(ById.id("gbqfb")); searchBox.sendKeys("test"); searchButton.click(); // 検索結果を確認する new WebDriverWait(driver, 10).until(ExpectedConditions.titleIs("test - Google 検索")); assertEquals("test - Google 検索", driver.getTitle()); // ブラウザを閉じる driver.close(); } |
このテストを実行すると、Googleでtestという文字列を検索し、検索結果画面のTitleが
期待通りの文字列になっていることを確認する。
タッキ博士「どうじゃ、環境適応設定(WebDriver)の実力は?」
レッド 「す、すげぇ。。。SUGEEEEEEEEEEEEEEEEEEEE!!!」
レッド 「これならどんな環境でも戦える!!!!」
タッキ博士「よしよし、良いリアクションじゃ。次回はSeleinum Gridについて教えよう!」
そして、テスティンガーは明日も世界平和のために戦うのであった、続く
関連記事
ユニット戦隊テスティンガーによる必殺兵器Selenium(光線)の解説