2011年10月25日火曜日

Selenium with JUnit(その2 解説)

Selenium のWebDriverを利用したJUnit(Java)によるプログラミングの解説です。

サンプルや, 設定などは前回のブログ Selenium with JUnit を参照してください。

Web Driverのプログラムにおいて, 核となるクラス(インターフェイス)はたった2つです。(Waitも使いますが, とりあえず)

WebDriver   :  org.apache.selenium.WebDriver   インターフェイス,  Webブラウザのコントロールのコアクラス,  ブラウザの初期設定, ブラウザタイトルの取得, HTML 要素の取得などを行います。

Selenium :  com.thoughtworks.selenium.Selenium クラス   Selenium IDEで利用していた関数をそのまま使えたりします。 つまり, click やtype などのブラウザ操作に利用できます。

※WebDriverは実際には,  FirefoxDriverであったり, RemoteWebDriverであったり具体的なクラスが入ります。

プログラミングの細かい点を見ていきましょう

初期化(Firefox)
Firefox profile = new Firefox
WebDriver driver = new FirefoxDriver(profile);
String baseURL = "http://localhost/index.html";
Selenium selenium = new WebDriverBackedSelenium(driver, baseURL);    // これでSelenium のインスタンスが利用できる

※Firefoxでの初期化です。WebDriverをつくって, 最終的に Selenium のインスタンスを取得します
selenium でopen などを行って移動してくと, WebDriverは自動的に, そのページの情報を取得していきます


要素の取得
WebElement element = driver.findElement(By.id("1st-id"));    //  id属性が 1st-id の要素を取得

List<WebElement> element = driver.findElements(By.id("multi-id"));

※findElementsだと複数取得できます。findElementの場合, 上から最初の要素となります

要素の特定には, By.xxx(""); を使いますおもなものをあげておきます。

By.id("");                    //  ID属性
By.linkText("");          //  link つまり  <a> の href属性
By.tagName("");         //  <div>  div などのタグの名前
By.className("");      //   class属性
By.xPath("");              //  XPath
By.cssSelector("");     //  CSS セレクタ
By.name("");              //   name属性


URLを開く
selenium.open("/");    //   / ルート(baseURL)を開く
selenium.waitForPageToLoad(TIMEOUT);

/ と指定した場合は, baseURLで設定した, URLを開きます。
base URLは通常は, テストしたい, Webページを書きます
"" 中にURLを書きます

ページをopenするときは, 必ず, waitForPageToLoadを入れましょう(引数はtimeout時間(ms)です)
ページのロード(描画)を待ちます。


ボタンをクリック
selenium.click("name=fine");    // name属性が fineのボタンをクリック

※ 引数は, Selenium IDEであった4つの方法と同じ書き方になります。

入力ボックスに値を入れる
selenium.type("//input[@class='test']", "Test");    // <input type="text" class="test"> にTestと入力   

終了処理
終了処理を行わないと, Webブラウザが開きっぱなしの状態になるので, JUnit (サンプルでは, @Afterで処理しました)以外の部分で利用する場合は, 必ず finally ブロックの中に入れましょう。
Selenium のインスタンス, WebDriverのインスタンスそれぞれclose()します

try
{
      //   ...   Seleniumの処理
}
finally
{
     selenium.close();
     driver.close();
}

いかがでしたでしょうか, 次回は, Chromeの設定方法です。




0 件のコメント:

コメントを投稿