Watinを利用したUIテストサンプル

前回の記事の続きで、TenohiraUITestプロジェクトの解説です。このプロジェクトではWatinとMbUnitを利用してWebアプリケーションのUIテストを自動化しています。
以下開発手順です。
 
(1)プロジェクトの作成、参照設定の追加
 ・テストプロジェクト(TenohiraUITest)を作成後、被テストプロジェクト(Tenohira)への参照を追加します。
 ・Watin.Core.dll, MbUnit.Framework.dllへの参照を追加します。
  Watinに含まれているInterop.SHDocVw.dll、Microsoft.mshtml.dllをWatin.Core.dllと同じディレクトリに配置します。
  
(2)テストクラスの作成(LogOn.aspxTest.vb)
 ・Watin.Core名前空間、MbUnit.Framework名前空間をインポートします。
 ・クラスの属性にシングルスレッドアパートメントモデルを付加します。
   <TestFixture(ApartmentState:=ApartmentState.STA)> _
  ※Watin内部ではIEのCOMを利用しているため、マルチスレッドアパートメントモデルでは正しく動作しません。
   Webのように並列で複数の処理要求を受け付けることができないので、直列で処理を行っていきます。
   上記クラス属性がないと、WatinがExceptionをスローします。(※何のExceptionかは忘れてしまいました)
  
(3)テストコードの記述
 ・最終的にMbUnitを使用してテストを実行するので、最終的(途中で)Assertionを入れるのはユニットテストと同じです。
  ただし、Watinを利用してIEを操作しなければならないので、WatinのAPIをある程度理解していなければ記述ができません。
  
  本当に苦労しました...orz
  以下、よく使われるものです。
  
  ’IEを起動(Windows Liveを表示)
  Dim Browser as new IE("http://home.live.com/")
  
  ’リンクをクリック(「メール」という文字列のリンクをクリックします)
  Browser.Link(Find.ByText("メール")).Click
  
  ’画像をクリック(フルパスで指定された画像をクリックします)
  Browser.Image(Find.BySrc("http://g.live.com/9uxp9ja-jp/hdr_main1??su=http://shared.live.com/")).Click
  
  ’ボタンクリック(input type=button name="BtnKensaku"のボタンをクリックします)
  Browser.Button(Find.ByName("BtnKensaku")).Click
  
  ’テキスト入力(input type=text name="txtSearchWord"のテキストボックスに「Hello World」と入力します)
  Browser.TextField(Find.ByName("txtSearchWord")).TypeText("Hello World")
  
  '<span>タグで囲まれたテキスト(ASP.NETのlabelコントロールは<span>で出力されるので、使用する機会は多いと思います)
  Browser.Span(Find.ByName("LblMessage)).Text
  
Watinは本格的に利用しようと思っているので、近いうちにリファレンスを(自分のために)作成しようと思います。
@ITでもWatinは紹介されているので、興味のある方はこちらを参照してください。
  Webアプリケーション用テスト・ライブラリ「WatiN」を使う

コメントを残す