UIA Pro アドインのベスト・プラクティス
関連:GUI テストおよびコンポーネント
このトピックでは,UIA Pro アドインを使用して UI 要素を操作する際のベスト・プラクティスとガイドラインについて説明します。
ステップに最適なメソッドの選択
UIA Pro では,多くの場合,複数のメソッドで同じ結果が得られます。ただし,各メソッドの利用可否や有効性は,テスト対象のアプリケーションと,そのアプリケーションがサポートする特定の UI Automation パターンによって異なります。適切なメソッドを選択するには,ターゲット・アプリケーションが提供する UI 構造と機能を理解する必要があります。すべてのメソッドが常にサポートされているわけではありません。
使用するメソッドを選択する際には,以下のガイドラインを考慮してください。
- パターンの利用可否を確認する
コントロールが複数のパターンをサポートしている場合は,UIA 固有のメソッドを優先し,シミュレートする必要のあるアクションに最も近いパターンを選択してください。実行時にサポートされているパターンを確認するには,HasSupportedPattern メソッドまたは HasSupportedPatterns メソッドを使用します。テストでは,実行時にパターンが利用できないシナリオにも対応できるようにしてください。
-
一般的なタスクにはハイレベル関数から始め,複雑なシナリオではローレベル関数に進みます。
詳細については,"UIA Pro 関数" を参照を参照してください。
-
オブジェクトの機能を検証する
コントロール・タイプの見た目が標準的な UI 要素(ボタンやドロップダウンなど)に似ていても,その動作は異なる場合があります。たとえば,ボタンのように見えるコントロールが,InvokePattern をサポートしていない場合があります。その代わりに,TogglePattern や独自の動作など,異なるパターンを実装している可能性があります。
コントロール・タイプのサポートされているパターンは,見た目に頼るのではなく,必ずプログラムで確認してください。
-
UIA 固有のメソッドを優先する
特に複雑なユーザ・インタフェースを扱う場合は,信頼性と柔軟性を高めるため,可能であればデバイス再生メソッドではなくパターン・ベースのメソッドを使用してください。
例:ボタン・クリック
可能な場合は,デバイス再生の Click メソッドの代わりに,UIA パターン・ベースの Invoke メソッドを使用することをお勧めします。
たとえば,以下の理由から,
UIAProButton("Button").Clickの代わりにUIAProButton("Button").InvokePattern.Invokeを使用することをお勧めします。UIA パターン・メソッド(Invoke)
デバイス再生メソッド(Click)
UIA フレームワーク呼び出しを直接使用します
物理的なマウス・クリックをシミュレートします
UI 要素が直接表示されていなくても機能します UI の応答性の問題が発生する場合があります UI の応答性に依存しません なし パターンがサポートされている場合は,信頼性が高くなります なし -
アプリケーションが UIA パターンをどのように実装するかを検討する
どのハイレベル・メソッドを使用するかを決定する際には,それが基づいているローレベル・メソッドと,アプリケーションがそれらをどのように実装するかを検討します。
例:テーブルからのセル値の取得
アプリケーション内のテーブル・セルは視覚的には似ているように見えるかもしれませんが,ValuePattern,TextPattern,またはその両方を通じて,データを異なる方法で表示します。
テーブルセルの値を取得するには,ハイレベル・メソッド GetCellValue または GetCellText を使用できます。
-
UIAProDataGrid("Grid").GridPattern.GetCellValue(0,0) -
UIAProDataGrid("Grid").GridPattern.GetCellText(0,0)
アプリケーションが ValuePattern,TextPattern をどのように実装しているかに応じて,使用するメソッドを選択してください。
GetCellText は TextPattern.GetText を呼び出してセルの内容を取得し,GetCellValue は ValuePattern.GetValue を呼び出します。
-
path 記述プロパティの使用
テスト・オブジェクト階層で,UI オブジェクト階層に存在する中間オブジェクトが省略されている場合は,テスト・オブジェクトの記述で path プロパティを使用する必要があります。
path プロパティでは正規表現を使用できません。このプロパティの値は常に単なる文字列として扱われます。
path プロパティが指定されていない場合,パスは親テスト・オブジェクトのパス(親が存在する場合)と,現在のテスト・オブジェクトのコントロール・タイプに対応するパス・セグメントを連結したものになります。
たとえば,次のような場合には path・プロパティが必要になります。
UI 階層に次のオブジェクトが含まれる:Window → Pane → Pane → List → ListItem。
オブジェクト・リポジトリに,Pane オブジェクトと ListItem オブジェクトのテスト・オブジェクトのみが含まれている。
-
親パス:
Window;Pane;Pane -
子パス:
Window;Pane;Pane;List;ListItem(または,相対パスを使用している場合は~List;ListItem)
すべての UI オブジェクトがテスト・オブジェクトで表されるわけではないため,両方のオブジェクトに path プロパティを指定する必要があります。
階層構造においてどのオブジェクトを表し,どのオブジェクトを省略するかを決定する際には,オブジェクトの認識のパフォーマンス,保守性,および信頼性が考慮されます。オブジェクトを学習した際に作成された階層構造を維持することを推奨します。テストの保守を容易にするために,パスのプロパティを絶対パスから相対パスに変更できます。詳細については,"オブジェクトの記述における相対パス" を参照を参照してください。
その他の参照項目:

