Wicket + Selenium IDEでのModalWindowのテスト

Wicketのバージョンは1.3.5。Selenium IDEのバージョンは1.0b2

Selenium IDEを使用してWicketのModalWindowをテストするときに必要になる事をメモ。

1.ModalWindowを表示させる用のコマンドを記述する

 そのまんまですね。これは『自動記録』の機能を使ったほうが早いでしょうか。
直接記述する場合は下記のような感じでOKだと思います。

  1. 『コマンド』は「click」(ModalWindowはAjaxになるのでclickAndWaitではなくclickのみで)
  2. 『対象』はそれぞれ環境にあった対象にします。XPathを指定してもいいですし、link=(リンクの文字列)とかでもOK
  • 例:ModalWindowを表示させるLinkがfooである場合
コマンド 対象
click link=foo

2.ModalWindowの表示完了を待つためのコマンドを記述する

 上記1にてModalWindowを表示させた状態の場合ModalWindowを特にカスタマイズしていなければModalWindowの左上に小さくページのタイトルみたいなのが表示されると思います。これはModalWindowをPageクラスとして作成した場合にそのPageクラスと対になるHTMLファイル内のpagetitleがそのまま表示されます。

<title>Foo Page</title>

↑この部分ですね。んで、この部分の表示が完了するまで待つためのコマンドを入力します。

  1. 『コマンド』を「waitForTextPresent」
  2. 『対象』を上記のページタイトルにします。
  • 例:ModalWindowのPageクラスの対になるHTML内のtitleが「Foo Page」である場合
コマンド 対象
waitForTextPresent Foo Page

3.ModalWindow内の情報の表示完了を待つためのコマンドを記述する

 WicketのModalWindowはHTMLのインラインフレームで実現されています。そして、もちろんこの部分も非同期処理なのでインラインフレームの表示が完了するまで待つコマンドを記述しなければいけません。waitForFrameToLoadというコマンドを使い、指定のフレームのロードが完了するまで待ちます。

  1. 『コマンド』を「waitForFrameToLoad」にします。
  2. 『対象』にはModalWindow#setPageMapNameメソッドで指定した文字列を入力します。
  3. 『値』には何秒待つかという情報をミリ秒単位で指定します。
  • 例:表示までに2000ミリ秒まつ場合
コマンド 対象
waitForFrameToLoad name=fooPage 2000

4.最後に、これ以降のコマンドがフレーム内におけるコマンドになるよう指定します。

 「selectFrame」というコマンドを使います。

  1. 『コマンド』を「selectFrame」にします。
  2. 『対象』に「index=0」を指定します。
  • 例:
コマンド 対象
selectFrame index=0

これでこれ以降のコマンド(assertTextPresent等)がModalWindow内に限定されます。

という感じです。自分は上記のようにしてModalWindowのテストは行ってますが「もっとこうしたほうがいいよ!」とか「ここ間違ってね?」とかいうご指摘お待ちしてます。
しかしSeleniumは素晴らしいですねぇ、今や自分の中では開発に絶対欠かせない物になってます。