AI ベースのテストのヒントとコツ
Mobile,Web,Windows ベースの SAP GUI のテスト
このトピックでは,AI ベースのテストを作成するためのヒントとコツを紹介します。
SetContext ステップを含める
検査を初めて開始し,Web ページなどのアプリケーションを選択すると,SetContext ステップが提案されます。[テストに追加]をクリックして,そのステップを他の AIUtil ステップより前のアクションに追加してください。この SetContext ステップは,AI エンジンに操作対象を指示します。
別のタブに切り替えたり,アプリケーションのダイアログ・ボックスが開いたりすると,コンテキストが変更される場合があります。こうしたケースに対処するため,検査を使用して,テストに追加する SetContext ステップを作成します。
オブジェクトの認識のヒント
このセクションでは,オブジェクト認識に関する一般的な提案をいくつか示します。その他の提案については,AI ベースのテスト・オブジェクトの認識の改善を参照してください。
再検査の遅延
項目にマウス・カーソルを合わせたときにのみ表示されるポップアップまたはメニューがある場合は,[再検査の遅延]オプションを使用します。再検査の遅延を開始し,項目にマウス・カーソルを合わせて,キャプチャするオブジェクトを表示します。詳細については,次のアプリケーション・ページ / 画面の検査を参照してください。
RegisterCustomClass
AI オブジェクト認識でサポートされていないオブジェクト・タイプがアプリケーションに含まれている場合は,それを表すカスタム・クラスを登録できます。詳細については,画像を使用したオブジェクトの記述を参照してください。
VRI の使用
オブジェクトを一意かつ一貫して識別できるようにするには,近くにある他のオブジェクトに基づいてオブジェクトを記述します。詳細については,相対的な位置でのオブジェクトの識別を参照してください。
変化するテキスト文字列
価格,税金,合計など,アプリケーション内で随時変化するテキストを識別するには,次の点を考慮してください。
-
正規表現を使用し,テキスト文字列の固定部分または形式に基づいて識別します。詳細については,正規表現を使用を参照してください。
-
オブジェクトのテキスト記述には,FindTextBlock ではなく FindText を使用します。FindText は文字列または部分文字列を検索しますが,FindTextBlock はオブジェクトの全テキストとの一致を検索します。詳細については,Object Model Referenceの FindText および FindTextBlock を参照してください。
AI ベースのテストにおけるテキスト認識
テキストを使用して AI オブジェクトを認識する場合は,次の点に注意してください。
-
AI OCR がアプリケーション内のテキストを正確に認識しない場合は,UFT OCR に切り替えて,その OCR をアプリケーションに合わせてカスタマイズできます。これは,オプション内の設定として行うか,または実行時にスクリプト・コマンドで行うことができます。詳細については,テキスト認識オプションの構成を参照してください。AI OCR が正確である場合は,その高速なパフォーマンスを活用してください。
-
検査ではアプリケーションに表示されているすべてのオブジェクトが識別されますが,テスト実行では指定されたオブジェクトが検索されます。これらのシナリオごとにテキストの識別方法が異なる可能性があることに注意してください。
例:
-
検査時に OCR が数字を英字として認識することがありますが,それでもその数字を使ってオブジェクトを記述するテスト・ステップは正常に実行されます。これは,AI ベースのメカニズムにより,信頼度がやや低くなるものの,そのテキストが識別されているためです。
-
記録に「PA SSWO rd」のような予期しないテキストが含まれている場合,フォントがわずかに誤認識されている可能性があります。ただし,そのテキストを「Password」のようなより一般的なテキストに変更すれば,ステップは正常に実行されます。
-
-
スペルミスのあるテキストでの OCR の失敗を防ぐ。OCR では,テストの実行時に,テキストの下に波線などのスペルミスの表示があるテキストを識別できません。
次の解決策のいずれかを使用します。
-
ブラウザまたはアプリケーションでスペルチェックを非アクティブにします。
-
スペルミスがあるテキストが表示されているフィールドから別の場所にフォーカスを移動します。これを行うには,テキストを取得するステップの前に,テキスト・フィールドの外側のどこかをクリックするステップをテストに追加します。
-
パフォーマンス
次の条件は,AI ベースのテストのパフォーマンスに影響を与える可能性があります。
テスト実行中の再検査を最小限に抑えることでパフォーマンスを改善
各 AIUtil コマンドは,アプリケーション・コンテキストの完全スキャンを実行します。アプリケーションがステップ間で変更されないことがわかっている場合は,AIUtil.Context.Freeze メソッドと UnFreeze メソッドを使用して再検査が行われないようにします。
GPU の使用
AI オブジェクト検出は計算量が多くなります。GPU マシンを使用して AI オブジェクト検出サービスを実行すると,実行速度が向上します。ただし,要件によっては,GPU を使用しない場合のパフォーマンスで十分な場合もあります。
オブジェクトの認識の検証オプションの適切な使用
ステップの実行前にオブジェクトの認識を検証すると,テストの実行速度が低下します。検証をオフにすることもできますが,その場合は,次のステップに進む前にアプリケーションの変化が完了していることを確認する必要があります。検証は,たとえばアプリケーションに動的に現れるオブジェクトなどの場合に役立ちます。オブジェクトの位置が最終的に確定するタイミングが判定されるためです。アプリケーションの一部が動的で,他の部分が静的である場合は,検証を動的にオフまたはオンにすることが推奨されます。詳細については,オブジェクトの認識の検証を参照してください。
プロパティ・ベースのテスト・ステップの AI ベースのテスト・ステップへの変換方法
AI Transformation Assistant を有効にしてテストを実行し,テクノロジ・ベースのテスト・ステップを AI ベースのテスト・ステップに変換するための提案を受け取ります。既存のステップを提案された AI オブジェクト・ステップで置き換えて,より柔軟でプラットフォームに依存しないテストを作成します。
アシスタントを有効にするには,[ツール]>[オプション]>[GUI テスト]>[AI]で,[実行結果をAIオブジェクトの候補に置き換える]を選択します。
このオプションを選択すると,テストの実行結果にテストの結果は反映されません。代わりに,プロパティ・ベースのテスト・オブジェクトを AI オブジェクトで置き換えることができるステップの AI オブジェクトと操作がレポートで提案されます。
注: AI Transformation Assistant では,AITable および AICalendar オブジェクト候補は提示されません。
キーボード・コマンドの AI オブジェクトへの送信
一部のアプリケーションでは,AI オブジェクトでの入力操作には,Enter を押すなど,追加のキーボード・コマンドが必要です。このコマンドは,デスクトップ・ブラウザの場合は Windows スクリプトまたはデバイス再生を使用し,モバイル・アプリケーションの場合は Device.EnterKeys を使用してシミュレートできます。
例 1 [Cell Phone]コンボ・ボックスにモデル名を入力し,Enter キーを送信して選択をトリガする
-
デスクトップ・ブラウザの場合
-
Windows スクリプトの使用
Copy codeAIUtil("combobox", "Cell Phone").Type "Pixel 2"
Dim mySendKeys
Set mySendKeys = CreateObject("WScript.shell")
'Enter キーを送信
mySendKeys.SendKeys("~")Windows Script Host の SendKeys メソッドの詳細については,「Microsoft VBScript Reference」を参照してください。
-
デバイス再生の使用
Copy codeAIUtil("combobox", "Cell Phone").Type "Pixel 2"
wait 5
Dim myDeviceReplay
Set myDeviceReplay = CreateObject("Mercury.DeviceReplay")
myDeviceReplay.PressKey 28 'Enter キーを送信
' その他のキーの例:
' myDeviceReplay.PressKey 14 'バックスペースを送信
' myDeviceReplay.PressKey 211 'Delete を送信
' myDeviceReplay.PressKey 15 'Tab を送信
' myDeviceReplay.PressKey 199 'Home を送信詳細については,Object Model Referenceの「DeviceReplay Object」を参照してください。
-
-
モバイル・アプリケーションの場合
Device.EnterKeys の使用
Copy codeAIUtil("combobox", "Cell Phone").Type "Pixel 2"
wait 5
Device("Device").Enterkeys typeKey, "Enter"ヒント: モバイル・デバイスのキーボード入力の処理が遅い場合は,アプリケーションにキーを送信する前に待機ステップを追加します。
詳細については,EnterKeys Method of Device Object を参照してください。
例 2 デスクトップ・ブラウザで,書き込む前にテキスト・ボックスをクリアする
デバイス再生の使用
Sub CleanInputField(Label)
AIUtil(input,Label).Click
Dim myDeviceReplay
Set myDeviceReplay = CreateObject("Mercury.DeviceReplay")
for i = 1 to 25
myDeviceReplay.PressKey 14
next
end sub
コンテキスト・フリーズ中の実行結果画面キャプチャ
AIUtil.Context.Freeze ステップの後,AI ベースのステップの実行結果の画面キャプチャには,フリーズされたコンテキストが反映されます。アプリケーション内で発生した変更はキャプチャされません。
アプリケーションで発生した変更をキャプチャするには,次のいずれかを実行します。
-
コンテキストのフリーズを解除します。
-
Browser や Device などの最上位オブジェクトに CaptureBitmap ステップを追加します。次に,Reporter.ReportHtmlEvent を使用して,結果にビットマップを追加します。
-
各ステップの結果に画面キャプチャを保存するように設定した場合は,Browser や Device などの最上位オブジェクトに Wait または Sync ステップを追加します。
-
ビデオを含めるように実行結果を設定します。
AIUtil("search").Search が検索を実行しない場合の対処法
一部のアプリケーションでは,検索アイコンをクリックした後に検索ボックスが表示されます。このような場合,AIUtil("search").Search はアプリケーションで検索操作を実行できない場合があります。
次の例に示すように,複数のステップを使用して検索を実行できます。
シナリオ 1
AIUtil("search").Search の後に検索ボックスにテキストが入力されない
推奨される解決策
AIUtil("search").Click
'検索ボックスが表示されるまでしばらく待機
wait 2
AIUtil("search").Search "telekom"
シナリオ 2
検索アイコンをクリックすると,検索ボックスがフォーカスされなくなり,2 つの検索アイコンが表示される
推奨される解決策
AIUtil("search").Click
'検索ボックスが表示されるまでしばらく待機
wait 2
AIUtil("search",micNoText,micFromBottom,1).Search "telekom"
シナリオ 3
検索アイコンをクリックすると,検索アイコンが表示されなくなり,検索ボックスがフォーカスされなくなる
推奨される解決策
AIUtil("search").Click
'検索ボックスが表示されるまでしばらく待機
wait 2
AIUtil("input","search").Type "telekom"
'Enter キーを押す
Dim myDeviceReplay
Set myDeviceReplay = CreateObject("Mercury.DeviceReplay")
myDeviceReplay.PressKey 28
スクロール可能な表示枠でのオブジェクトの検索
次の例で,AIUtil.Scroll メソッドを使用して,アプリケーションのスクロール可能な表示枠でオブジェクトを検索する方法を示します。
Set ObjBrowser= Browser("creationtime:=1")
ObjBrowser.Maximize
AIUtil.SetContext ObjBrowser
'---------------------------------------------------------------------------------------
ObjBrowser.Navigate https://www.youtube.com/
ObjBrowser.Sync
'wait(2)
'---------------------------------------------------------------------------------------
print ClickAndScrollTo ( AIUtil("home"), AIUtil.FindTextBlock("Report history"))
'---------------------------------------------------------------------------------------
ObjBrowser.Navigate https://usa.banggood.com
ObjBrowser.Sync
'wait(2)
-----------------------------------------------------------------------------------------
print ClickAndScrollTo (AIUtil("down_triangle", micAnyText, micFromTop, 5), AIUtil.FindTextBlock("Home Appliances", micFromBottom, 1))
'--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Function ClickAndScrollTo (ObjStart, ObjTarget)
ClickAndScrollTo=false
AIUtil.RunSettings.AutoScroll.Disable
ObjStart.Highlight
ObjStart.Click
For i = 1 To 4
if ObjTarget.Exist(0) then
ObjTarget.Highlight
ObjTarget.hover
ClickAndScrollTo=true
exit function
end if
'ScrollUsingPointerPosition([in] micAIScrollDirection direction, [in] double numberOfWheelTicks);
'AIUtil.Hover または別のメソッド (DeviceReplay など) を使用して,スクロール・オブジェクト上にマウスを移動
AIUtil.Scroll "down", 1
Next
End Function
SAP GUI アプリケーションでの水平スクロール
AIUtil.Scroll と AIUtil.ScrollOnObject が SAP GUI アプリケーションで水平スクロールを提供しない場合は,AIUtil.Click と AIUtil.MultiClick を使用して水平スクロールを実行できます。
' 右の三角形をクリックして右スクロールを実行します。
' 複数の right_triangle がある場合は,相対的な位置によってコントロールを識別できます。
Set ObjRightTriangle = AIUtil("right_triangle")
'右の三角形を 4 回クリックします。
ObjRightTriangle.MultiClick 4
' 左の三角形をクリックして左スクロールを実行します。
Set ObjLeftTriangle = AIUtil("left_triangle")
'左の三角形をクリックします。
ObjLeftTriangle.Click
その他の参照項目: