Biz∫のWEBアプリケーションのシナリオテストを自動化したい(3)

先日のエントリ[id:sikakura:20100825]では、Selenium-RCを使用してコマンドラインからシナリオテストを実行しました。
今度は、API経由でテストしてみます。
前回と同様のダウンロードサイトhttp://seleniumhq.org/download/)からSelenium-RCを落としてきます。

前回は、selenium-server-1.0.3だけ使用しましたが、今回はクライアント用ライブラリのselenium-java-client-driver-1.0.1も必要になります。
具体的には、そのフォルダ内にある、selenium-java-client-driver.jarというファイルになります。

作業の流れを示しておきます。
なんだか面倒な感じですが、そんなに大したことありません。


1.テストケースをSelenium-IDEで作成し、フォーマットをJavaJUnit)にします

すると以下のようなJUnitソースコードの雛型が作成されます。

2.Eclipseでプロジェクトを作成し、プロジェクトにJUnit3のライブラリを追加します(ライブラリーの追加)

ライブラリの追加で、JUnit3を追加します。

3.さらに、selenium-java-client-driver.jarを追加します(外部 JARの追加)

4.クラスを追加し、Selenium-IDEで作成されたソースをペーストします
5.プログラムを修正します
プログラムは、1.のソースコードの雛型をコピペします。
setUpメソッドの内容は、アプリケーションサーバIPアドレスになります。

import com.thoughtworks.selenium.SeleneseTestCase;
public class TestMaskat extends SeleneseTestCase {

    public void setUp() throws Exception {
        setUp("http://XX.XX.XX.XX:YYYY/", "*firefox");
    }
    public void testSecond() throws Exception {
        selenium.open("/imart/default.portal");
        selenium.type("im_user", "aoyagi");
        selenium.type("im_password", "aoyagi");
        selenium.click("//input[@value='ログイン']");
        selenium.waitForPageToLoad("40000");
        for (int second = 0;; second++) {
            if (second >= 60)
                fail("timeout");
            try {
                if (selenium.isElementPresent("topFrame"))
                    break;
            } catch (Exception e) {
            }
            Thread.sleep(1000);
        }

        selenium.selectFrame("IM_MENU");
        for (int second = 0;; second++) {
            if (second >= 60)
                fail("timeout");
            try {
                if (selenium.isElementPresent("link=MDM"))
                    break;
            } catch (Exception e) {
            }
            Thread.sleep(1000);
        }

        selenium.click("link=MDM");
        // selenium.waitForPageToLoad("40000");
        selenium.click("link=品目マスタ");
        // selenium.waitForPageToLoad("40000");
        selenium.click("link=品目マスタ検索");
        // selenium.waitForPageToLoad("40000");
        selenium.selectFrame("relative=up");
        selenium.selectFrame("IM_MAIN");
        selenium.waitForFrameToLoad("IM_MAIN", "30000");
        for (int second = 0;; second++) {
            if (second >= 60)
                fail("timeout");
            try {
                if (selenium.isElementPresent("dijit_Dialog_1"))
                    break;
            } catch (Exception e) {
            }
            Thread.sleep(1000);
        }
        selenium.waitForCondition("selenium.browserbot.findElement('dijit_Dialog_1').style.display == 'none'","30000");
        selenium.click("maskat_widget_dojo_57");
        for (int second = 0;; second++) {
            if (second >= 60)
                fail("timeout");
            try {
                if (selenium.isElementPresent("dijit_Dialog_2"))
                    break;
            } catch (Exception e) {
            }
            Thread.sleep(1000);
        }
        selenium.waitForCondition("selenium.browserbot.findElement('dijit_Dialog_2').style.display == 'none'","30000");
    }
}

6.Selenium-RCのサーバを起動します
C:\home\selenium-server-1.0.3にSelenium-RCの一式があるなら、以下のような感じです。

C:\home\selenium-server-1.0.3>java -jar selenium-server.jar -singleWindow


7.JUnitを実行します

ユニットテストが開始されると、自動的にブラウザ(上のコードの例だとfirefox)が起動しシナリオテストが
終了すると結果表示とともにブラウザが閉じます。
なかなか良くできていますね。