前回の記事の続きで、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」を使う
・テストプロジェクト(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」を使う