UI オートメーションによる自動テスト
この概要では、自動テストのシナリオで、プログラムによるアクセスのためのフレームワークとして Microsoft UI オートメーションがどのように役立つかについて説明します。
UI オートメーションは、すべての UI フレームワークが、アクセス可能で簡単に自動化された方法で複雑で豊富な機能を公開できるようにする統合オブジェクト モデルを提供します。
UI オートメーションは、コントロールとアプリケーションをアクセシビリティ対応にするためのソリューションを提供するように設計されたフレームワークである Microsoft Active Accessibility の後継として開発されました。 Microsoft Active Accessibility はテストの自動化を念頭に置いて設計されていませんでしたが、アクセシビリティと自動化の要件が似ているため、その役割に進化しました。 UI オートメーションは、アクセシビリティのためのより洗練されたソリューションを提供するだけでなく、自動テストに堅牢な機能を提供するように特別に設計されています。 たとえば、Microsoft Active Accessibility は、UI に関する情報を公開し、支援技術製品に必要な情報を収集するために、1 つのインターフェイスに依存しています。UI オートメーションは、2 つのモデルを分離します。
自動化されたテスト ツールとして役立つUI オートメーションを実装するには、プロバイダーとクライアントの両方が必要です。 UI オートメーション プロバイダーは、Microsoft Word、Microsoft Excel、Windows オペレーティング システムに基づくその他のサードパーティ製アプリケーションまたはコントロールなどのアプリケーションです。 UI オートメーション クライアントは、自動テスト スクリプトや支援 (補助) 技術アプリケーションなどです。
このトピックは、次のセクションで構成されています。
プロバイダーのUI オートメーション
ユーザー インターフェイスの要素を自動化するには、開発者は、標準のキーボード操作とマウス操作を使用して、エンド ユーザーが UI オブジェクトに対して実行できるアクションを確認する必要があります。 これらの主要なアクションが特定されたら、UI 要素の機能と動作をミラーするUI オートメーション コントロール パターンをコントロールに実装する必要があります。 たとえば、コンボ ボックス コントロールを使用したユーザー操作では、通常、コンボ ボックスを展開して折りたたみ、項目のリストを表示または非表示にしたり、リストから項目を選択したり、キーボード入力を使用して新しい値を追加したりできます。
他のユーザー補助モデルでは、開発者が直接、個々のボタン、メニューなどのコントロールから情報を収集する必要があります。 すべてのコントロールの種類には、多数の小さなバリエーションがあります。 つまり、10 個のプッシュ ボタンのバリエーションが同じように動作し、同じ機能を実行する場合でも、これらはすべて一意のコントロールとして扱う必要があります。 これらのコントロールが機能的に同等であることを知る方法はありません。 UI オートメーションコントロール パターンは、これらの一般的な制御動作を表すために開発されました。 詳細については、「 UI Automation Control Patterns Overview」を参照してください。
UI オートメーションによって提供されるコントロール パターンの統合モデルがない場合、テスト ツールと開発者は、そのフレームワークでプロパティとコントロールの動作を公開するためのフレームワーク固有の情報を持っている必要があります。 Microsoft Win32、Windows フォーム、Windows Presentation Foundation (WPF) など、複数の異なる UI フレームワークが Windows オペレーティング システムに同時に存在する可能性があるため、似ているように見えるコントロールを使用して複数のアプリケーションをテストするのは困難な作業になる可能性があります。 たとえば、次の表に、ボタン コントロールに関連付けられている名前またはテキストを取得するために必要なフレームワーク固有のプロパティ名を示し、同等の UI オートメーション プロパティを示します。
コントロール型 | UI フレームワーク | フレームワーク固有のプロパティ | UI オートメーションのプロパティ |
---|---|---|---|
Button | WPF | コンテンツ | Name プロパティ |
ボタン | Win32 | Caption | Name プロパティ |
Image | HTML | alt | Name プロパティ |
UI オートメーション プロバイダーにより、そのコントロールのフレームワーク固有のプロパティから、同等の UI オートメーション プロパティへのマッピングが行われます。 プロバイダーでのUI オートメーションの実装の詳細については、「UI オートメーション プロバイダー プログラマー ガイド」を参照してください。 コントロール パターンの実装については、「UI オートメーション コントロール パターンの実装」を参照してください。
クライアントでのUI オートメーション
自動テスト ツールとシナリオの目的は、UI の一貫性のある反復可能な操作です。 たとえば、これには、特定のコントロールの単体テスト、およびコントロールのグループに対する一連の一般的なアクションを反復処理するテスト スクリプトの記録と実行が含まれる場合があります。
自動アプリケーションの複雑さは、テストを動的ターゲットと同期するのが難しいことです。たとえば、現在実行中のアプリケーションの一覧を表示する Windows タスク マネージャーなどのリスト ボックス コントロールです。 リスト ボックス内の項目はテスト アプリケーションの制御外で動的に更新されるため、一貫性のあるリスト ボックス内の特定の項目を繰り返し選択することは不可能です。 テスト アプリケーションの制御外にある UI で単純なフォーカス変更を繰り返そうとすると、同様の問題が発生する可能性があります。
プログラムによるアクセス
プログラムによるアクセスでは、従来のマウス入力やキーボード入力によって公開される対話やエクスペリエンスをコードによって模倣する機能が提供されます。 UI オートメーションは、5 つのコンポーネントにより、プログラムによるアクセスを有効にします。
- UI オートメーション ツリーは、UI の構造全体にわたってナビゲーションを容易にします。 ツリーは HWNDのコレクションから構築されます。 詳細については、「UI オートメーション ツリーの概要」を参照してください。
- オートメーション要素は、UI の個々のコンポーネントです。 多くの場合、 これらは HWND よりも細かい場合があります。
- オートメーション プロパティは、UI 要素に関する具体的な情報を提供します。 詳細については、「 UI Automation Properties Overview」を参照してください。
- コントロール パターンは、コントロールが持つ機能の特定の側面を定義します。プロパティ、メソッド、イベント、および構造体の情報で構成することができます。 詳細については、「 UI Automation Control Patterns Overview」を参照してください。
- オートメーション イベントは、イベント通知と情報を提供します。 詳細については、「 UI Automation Events Overview」を参照してください。
自動テストの主要なプロパティ
UI 内のコントロールを一意に識別し、その後検索する機能は、自動化されたテスト アプリケーションがその UI で動作するための基礎となります。 クライアントとプロバイダーがコントロールを識別および検索するために使用するUI オートメーションプロパティを次の表に示します。
プロパティ | 説明 |
---|---|
AutomationId | オートメーション要素とその兄弟を一意に区別します。 AutomationId プロパティのサポートは必要ありません。 使用可能な場合、要素の AutomationId プロパティは、ローカル言語に関係なく、アプリケーションの任意のインスタンスで同じです。 AutomationId プロパティは兄弟要素間で一意ですが、デスクトップ全体で一意ではない場合があります。 たとえば、アプリケーションの複数のインスタンス、または Microsoft Windows エクスプローラーの複数のフォルダー ビューには、"SystemMenuBar" など、同じ AutomationIdProperty を持つ要素を含めることができます。 クライアントは、他のアプリケーションによって公開される AutomationId に関する想定を行うべきではありません。 AutomationId は、アプリケーションの異なるリリースまたはビルド間で安定するとは限りません。 |
ControlType | オートメーション要素によって表されるコントロール型を識別します。 コントロール型がわかると、そこから多くの情報を推測できます。 詳細については、「 UI Automation Control Types Overview」を参照してください。 |
名前 | オートメーション要素の目的を識別または説明するテキスト文字列。 ローカライズできるため、注意して使用する必要があります。 Name プロパティは、兄弟間の一意の識別子ではありません。 テストオートメーションの場合、クライアントは代わりに AutomationId プロパティまたは RuntimeId プロパティを使用する必要があります。 |
RuntimeId | オートメーション要素の識別子を表す整数の配列。 識別子はデスクトップで一意ですが、生成されたデスクトップの UI にのみ一意であることが保証されます。 識別子は時間の経過と同時に再利用できます。 IUIAutomation::CompareElements を使用して、現在特定のランタイム ID を持つ要素がその ID を持っていた要素と同じかどうかを判断します。 また、RuntimeId プロパティの形式が変更される場合があります。 これは不透明な値として扱われ、比較にのみ使用する必要があります。たとえば、オートメーション要素がキャッシュ内にあるかどうかを判断します。 |
関連ツールと関連技術
Inspect (Inspect.exe) は、プロバイダーとクライアントの開発とデバッグに関するUI オートメーション情報を収集するために使用できる Windows ベースのツールです。 検査は、Windows ソフトウェア開発キット (SDK) に含まれています。
関連トピック