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で作成し、フォーマットをJava(JUnit)にします
すると以下のような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)が起動しシナリオテストが
終了すると結果表示とともにブラウザが閉じます。
なかなか良くできていますね。