以前のアイテムで、aiWM Web Tester を使ったという話は書きましたが。
今回複数ページに似たような修正を加える必要が出てきまして。
自動化に適してたので再挑戦してみました。
再度
aiWM Web Testerチュートリアル を参考にして。
雛形っぽいの作成。
Option Explicit
(このへんで初期設定)
Public Function aiWMProcedure()
Dim objCore
Dim objBrowsers
Dim objBrowser
Set objCore = CreateObject("aiWM.Core")
Set objBrowsers = objCore.GetBrowsers
Set objBrowser = objBrowsers.Add(TargetUrl,58,58,660,600)
'テストの実行
Dim Ret 'テスト結果格納用
Ret = ""
(この辺でテスト実行)
If Ret = "" Then
aiWMProcedure = "0 Success " & Date & " " & Time
Else
aiWMProcedure = "1 " & Ret & " " & Date & " " & Time
End If
'ブラウザを閉じておく
objBrowser.Terminate()
Exit Function
End Function
で、今回やりたいのは
・フォームのデフォルト値チェック
・特定の文言の表示有無チェック
・入力フォーマットチェックの有無確認
あたり。
このへんも定型文っぽいのを作っておこう。
■フォームのデフォルト値
これは、まあ簡単かな。
初期設定として、
'テスト内容の設定
Dim TargetUrl 'テスト対象のURL
Dim TargetItem 'テスト対象のタグを表す文字列
Dim DefaultValue 'デフォルト値として期待される値
TargetUrl = "http://www.sample.com/hoge.html"
TargetItem = "Tag='SELECT',name='age'"
DefaultValue = "20"
で、テストとして、
Dim Value '取得値格納用
'アイテムの存在確認
If (Not objBrowser.ItemExists(TargetItem)) Then
Ret = "Item Not Found"
Else
'アイテムのデフォルト値確認
objBrowser.SelectItem(TargetItem)
Value = objBrowser.GetItemProperty("value")
If Value <> DefaultValue Then
Ret = "Invalid Default Value: [" & Value & "]"
End If
End If
と。
■特定の文言の表示有無チェック
objBrowser.GetText() とか objBrowser.GetHTMLText() が使おうとしたけど、なぜかうまくいかず。
以前はうまくいってたと思うから・・・Windows XP だとダメとか・・・?
とりあえず代替で適当に。
'テスト内容の設定
Dim TargetUrl 'テスト対象のURL
Dim TargetItems 'テスト対象のタグを表す文字列のリスト
TargetUrl = "http://www.sample.com/hoge.html"
Set TargetItems = CreateObject("Scripting.Dictionary")
TargetItems.Add "k1", "Tag='A',href='javascript:OpenHoge()'"
TargetItems.Add "k2", "Tag='img',src='http://www.sample.com/hoge.gif'"
TargetItems.Add "k3", "Tag='img',alt='ほげほげはこちら'"
こんな感じで含むべきタグのリストを宣言しておいて・・・
Dim TargetItem
'文字列の存在確認
For Each TargetItem In TargetItems.Items
If Not objBrowser.ItemExists(TargetItem) Then
If Ret = "" Then Ret = "Item Not Found"
Ret = Ret & "[" & TargetItem & "]"
End If
Next
こんな感じで。
気をつけるのは img タグの src とか、絶対 URL で指定しないといけないこと。
あと td タグとかはうまく拾えない予感。
■入力フォーマットチェックの有無確認
ページの遷移が必要だけど、この部分を初期設定部に持って行きたい。
ので、
'テスト内容の設定
Dim TargetUrl 'テスト対象のURL
Dim Prepare '事前準備
TargetUrl = "http://www.sample.com/hoge.html"
Prepare = _
"objBrowser.CurrentFrameIndex = ""/""" & vbCrLf & _
"objBrowser.SelectItem ""Tag='INPUT',Type='text',name='name'""" & vbCrLf & _
"objBrowser.ItemProc ""INPUT"",""miau""" & vbCrLf & _
"objBrowser.SelectItem ""Tag='SELECT',Type='select-one',name='age'""" & vbCrLf & _
"objBrowser.ItemProc ""SELECT_INDEX"",""5""" & vbCrLf & _
"objBrowser.SelectItem ""Tag='INPUT',Type='image',name='submit'/2""" & vbCrLf & _
"objBrowser.ItemProc ""CLICK"""
こんな宣言をしておいて・・・
'事前準備(ページ遷移等)
Execute Prepare
処理の冒頭にこんなの追加。
何度も同じ準備が必要なら、Prepare はファイルに外だししてもいいかも。
で、移動後のページに「○○がありません」っていう文字列が出るかどうかで、フォーマットチェックの有無を確認と。
このへんは前項との組み合わせで可能。
・・・とまあそこそこ順調だったんですけど。
objBrowser.GetText() や objBrowser.GetHTMLText() が使えない+td タグの内容とかは拾えないということで、どうしてもテストできない部分が出てきたり。
ということで今回は結局手作業でやりましたけど、この問題解決できたらそこそこ使えそうな気がしてきました。
ありがとうございます。