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 code
      AIUtil("combobox", "Cell Phone").Type "Pixel 2"
      Dim mySendKeys
      Set mySendKeys = CreateObject("WScript.shell")
      'Enter キーを送信
      mySendKeys.SendKeys("~")       

      Windows Script Host の SendKeys メソッドの詳細については,「Microsoft VBScript Reference」を参照してください。

    • デバイス再生の使用

      Copy code
      AIUtil("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 code
    AIUtil("combobox", "Cell Phone").Type "Pixel 2"
    wait 5    
    Device("Device").Enterkeys typeKey, "Enter"

    ヒント: モバイル・デバイスのキーボード入力の処理が遅い場合は,アプリケーションにキーを送信する前に待機ステップを追加します。

    詳細については,EnterKeys Method of Device Object を参照してください。

例 2 デスクトップ・ブラウザで,書き込む前にテキスト・ボックスをクリアする

デバイス再生の使用

Copy code
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 ベースのステップの実行結果の画面キャプチャには,フリーズされたコンテキストが反映されます。アプリケーション内で発生した変更はキャプチャされません。

アプリケーションで発生した変更をキャプチャするには,次のいずれかを実行します。 

  • コンテキストのフリーズを解除します。

  • BrowserDevice などの最上位オブジェクトに CaptureBitmap ステップを追加します。次に,Reporter.ReportHtmlEvent を使用して,結果にビットマップを追加します。

  • 各ステップの結果に画面キャプチャを保存するように設定した場合は,BrowserDevice などの最上位オブジェクトに Wait または Sync ステップを追加します。

  • ビデオを含めるように実行結果を設定します。

先頭に戻る

AIUtil("search").Search が検索を実行しない場合の対処法

一部のアプリケーションでは,検索アイコンをクリックした後に検索ボックスが表示されます。このような場合,AIUtil("search").Search はアプリケーションで検索操作を実行できない場合があります。

次の例に示すように,複数のステップを使用して検索を実行できます。

シナリオ 1

AIUtil("search").Search の後に検索ボックスにテキストが入力されない

推奨される解決策

Copy code
AIUtil("search").Click
'検索ボックスが表示されるまでしばらく待機
wait 2
AIUtil("search").Search "telekom"

シナリオ 2

検索アイコンをクリックすると,検索ボックスがフォーカスされなくなり,2 つの検索アイコンが表示される

推奨される解決策

Copy code
AIUtil("search").Click
'検索ボックスが表示されるまでしばらく待機
wait 2
AIUtil("search",micNoText,micFromBottom,1).Search "telekom"

シナリオ 3

検索アイコンをクリックすると,検索アイコンが表示されなくなり,検索ボックスがフォーカスされなくなる

推奨される解決策

Copy code
AIUtil("search").Click
'検索ボックスが表示されるまでしばらく待機
wait 2
AIUtil("input","search").Type "telekom"

'Enter キーを押す
Dim myDeviceReplay
Set myDeviceReplay = CreateObject("Mercury.DeviceReplay")
myDeviceReplay.PressKey 28

先頭に戻る

スクロール可能な表示枠でのオブジェクトの検索

次の例で,AIUtil.Scroll メソッドを使用して,アプリケーションのスクロール可能な表示枠でオブジェクトを検索する方法を示します。

Copy code
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.ScrollAIUtil.ScrollOnObject が SAP GUI アプリケーションで水平スクロールを提供しない場合は,AIUtil.ClickAIUtil.MultiClick を使用して水平スクロールを実行できます。

Copy code
' 右の三角形をクリックして右スクロールを実行します。
' 複数の right_triangle がある場合は,相対的な位置によってコントロールを識別できます。
Set ObjRightTriangle = AIUtil("right_triangle")
'右の三角形を 4 回クリックします。
ObjRightTriangle.MultiClick 4
' 左の三角形をクリックして左スクロールを実行します。
Set ObjLeftTriangle = AIUtil("left_triangle")
'左の三角形をクリックします。
ObjLeftTriangle.Click

先頭に戻る

その他の参照項目: