UI オートメーションによる自動テスト
更新 : 2007 年 11 月
ここでは、自動テストのシナリオで、プログラムによるアクセスのためのフレームワークとして Microsoft UI オートメーションがどのように役立つかについて説明します。
UI オートメーションの統一されたオブジェクト モデルを使用すると、すべてのユーザー インターフェイス (UI) フレームワークにおいて、複雑で豊富な機能をアクセシビリティが高く自動化しやすい方法で公開できます。
UI オートメーションは、Microsoft Active Accessibility の後継として開発されました。Active Accessibility は、コントロールとアプリケーションにアクセシビリティを与えるために設計された既存のフレームワークです。ユーザー補助と自動化の要件がよく似ているため、Active Accessibility はテストの自動化に使用されるようになりましたが、この役割を想定して設計されたものではありません。UI オートメーションは、ユーザー補助のためのより洗練されたソリューションを提供するだけでなく、信頼性の高い自動テスト機能を提供するように設計されています。たとえば、Active Accessibility では、UI に関する情報の公開と、AT 製品に必要な情報の収集の両方に、同じインターフェイスを使用します。これに対して UI オートメーションでは、2 つのモデルを分けています。
UI オートメーションを自動テスト ツールとして利用するには、プロバイダとクライアントの両方にこれを実装する必要があります。UI オートメーション プロバイダは、Microsoft Word、Excel やその他のサードパーティ アプリケーションなどのアプリケーション、または Microsoft Windows オペレーティング システムに基づくコントロールです。UI オートメーション クライアントは、自動テスト スクリプトや支援テクノロジ アプリケーションなどです。
メモ : |
---|
この概要の目的は、UI オートメーションの、自動テストに関する新機能と強化された機能について説明することです。この概要はユーザー補助機能に関する情報の提供を目的とするものではなく、必要な場合以外、ユーザー補助については説明しません。 |
このトピックには次のセクションが含まれています。
- プロバイダにおける UI オートメーション
- クライアントにおける UI オートメーション
- 関連ツールと関連技術
- セキュリティ
- 関連トピック
プロバイダにおける UI オートメーション
UI を自動化するためにアプリケーションやコントロールの開発者が注意する必要があるのは、その UI オブジェクトでキーボードとマウスの標準操作を使用して実行できるエンド ユーザーのアクションです。
これらの主要なアクションを特定したら、対応するUI オートメーションコントロール パターン (つまり、UI 要素の機能と動作をミラー化するコントロール パターン) をコントロール上に実装します。たとえば、コンボ ボックス コントロール (実行用のダイアログなど) でのユーザー操作には、通常、項目の一覧を非表示にしたり表示したりするためのコンボ ボックスの展開と折りたたみ、一覧からの項目の選択、またはキーボード入力による新しい値の追加が含まれます。
メモ : |
---|
他のユーザー補助モデルでは、開発者が直接、個々のボタン、メニューなどのコントロールから情報を収集する必要があります。しかも、各コントロール型には、細部の異なるバリエーションが多数存在します。つまり、あるプッシュボタンに 10 個のバリエーションが存在すると、それらすべての動作と機能が同じであっても、それぞれを別個のコントロールとして扱う必要があります。これらのコントロールが機能的に同等であることを知る方法はありません。コントロール パターンは、こうした共通のコントロール動作を表すために開発されました。詳細については、「UI オートメーション コントロール パターンの概要」を参照してください。 |
UI オートメーションの実装
既に述べたように、UI オートメーションの統一されたモデルを使用しない場合、フレームワーク内のコントロールのプロパティや動作を公開するためには、フレームワーク固有の情報をテスト ツールや開発者が知る必要があります。Windows オペレーティング システム内には常に、Win32、Windows フォーム、Windows Presentation Foundation (WPF) などの複数の UI フレームワークが存在する可能性があるため、似たようなコントロールを持つ複数のアプリケーションをテストすることは困難な場合があります。次の表では、例として、あるボタン コントロールに関連付けられた名前 (またはテキスト) を取得するために必要なフレームワーク固有のプロパティ名と、それと同等の単一 UI オートメーションプロパティを示します。
UI オートメーション コントロール型 |
UI フレームワーク |
フレームワーク固有のプロパティ |
UI Automation のプロパティ |
---|---|---|---|
ボタン |
Windows Presentation Foundation |
Content |
NameProperty |
ボタン |
Win32 |
Caption |
NameProperty |
イメージ |
HTML |
alt |
NameProperty |
UI オートメーション プロバイダは、そのコントロールのフレームワーク固有のプロパティから、同等の UI オートメーション プロパティへのマッピングを行います。
UI オートメーションをプロバイダに実装する方法については、「マネージ コードの UI オートメーション プロバイダ」を参照してください。コントロール パターンを実装する方法については、「UI オートメーション コントロール パターン」および「UI オートメーション テキスト パターン」を参照してください。
クライアントにおける UI オートメーション
多くの自動テスト ツールやシナリオの目的は、一貫性があって再現可能なユーザー インターフェイス操作です。これには、特定のコントロールの単体テストから、コントロールのグループに対する一連の一般的なアクションを反復処理するテスト スクリプトの記録と再生までが含まれます。
自動アプリケーションでの問題は、動的な対象にテストを合わせることが難しい点です。たとえば、Windows タスク マネージャに含まれているような、現在実行中のアプリケーションを一覧表示するリスト ボックス コントロールがあります。リスト ボックス内の項目はテスト アプリケーションの制御範囲外で動的に更新されるため、リスト ボックスの特定の項目を一貫性を保って繰り返し選択することは不可能です。テスト アプリケーションの制御範囲外の UI でフォーカスの単純な変更を繰り返そうとした場合も、同様の問題が起きることがあります。
プログラムによるアクセス
プログラムによるアクセスでは、従来のマウス入力やキーボード入力によって公開される対話やエクスペリエンスをコードによって模倣する機能が提供されます。UI オートメーションは、5 つのコンポーネントにより、プログラムによるアクセスを有効にします。
UI オートメーションツリーは、UI の構造全体にわたってナビゲーションを容易にします。ツリーは、hWnd のコレクションから構築されます。詳細については、「UI オートメーション ツリーの概要」を参照してください。
オートメーション要素は、UI の個々のコンポーネントです。通常、これらは hWnd よりも細かい単位です。詳細については、「UI オートメーション コントロール型の概要」を参照してください。
オートメーション プロパティは、UI 要素に関する具体的な情報を提供します。詳細については、「UI オートメーション プロパティの概要」を参照してください。
コントロール パターンは、コントロールが持つ機能の特定の側面を定義します。プロパティ、メソッド、イベント、および構造体の情報で構成することができます。詳細については、「UI オートメーション コントロール パターンの概要」を参照してください。
オートメーション イベントは、イベント通知と情報を提供します。詳細については、「UI オートメーション イベントの概要」を参照してください。
自動テストの主要なプロパティ
UI 内の任意のコントロールを一意に識別して検索する機能は、自動テスト アプリケーションがその UI を処理する基盤です。Microsoft UI オートメーション プロパティの中にはこれを支援するものがいくつかあり、クライアントとプロバイダによって使用されます。
AutomationID
オートメーション要素をその兄弟から一意に識別します。製品が複数言語で出荷される場合に通常ローカライズされる NameProperty などのプロパティとは異なり、AutomationIdProperty はローカライズされません。「AutomationID プロパティの使用」を参照してください。
メモ : |
---|
AutomationIdProperty では、オートメーション ツリー全体にわたって一意に識別できるとは限りません。たとえば、アプリケーションには複数のトップレベルのメニュー項目を持つメニュー コントロールが含まれ、さらに、それらのメニュー項目に複数の子メニュー項目が含まれている場合があります。これらの 2 次メニュー項目は、Item1、Item2、Item3 などの汎用スキームで識別され、トップレベルのメニュー項目間で子の識別子が重複することがあります。 |
ControlType
オートメーション要素によって表されるコントロール型を識別します。コントロール型がわかると、そこから多くの情報を推測できます。「UI オートメーション コントロール型の概要」を参照してください。
NameProperty
これは、コントロールを識別または説明するテキスト文字列です。NameProperty はローカライズされる可能性があるため、注意して使用する必要があります。「UI オートメーション プロパティの概要」を参照してください。
テスト アプリケーションへの UI オートメーションの実装
UI オートメーション参照を追加します。 |
UI オートメーション クライアントに必要な UI オートメーションの dll を次に示します。
|
System.Windows.Automation 名前空間を追加します。 |
この名前空間には、UI オートメーションのテキスト処理以外の機能を使用するために UI オートメーション クライアントが必要とするすべてのものが含まれています。 |
System.Windows.Automation.Text 名前空間を追加します。 |
この名前空間には、UI オートメーションのテキスト処理機能を使用するために UI オートメーション クライアントが必要とするすべてのものが含まれています。 |
目的のコントロールを検索します。 |
自動テスト スクリプトは、目的のコントロールを表す UI オートメーション要素をオートメーション ツリー内で検索します。 コードで UI オートメーション要素を取得する方法は複数あります。
メモ :
AutomationIdProperty は、コントロールの UI オートメーション プロパティを示すことができる UI Spy (UISpy.exe) などのツールを使用して取得できます。
UI オートメーション要素の取得 を参照してください。 |
コントロール パターンを取得します。 |
コントロール パターンは、機能的によく似た複数のコントロールにおける共通の動作を公開します。 自動テスト スクリプトは、テストする必要があるコントロールを特定すると、それらの UI オートメーション要素から目的のコントロール パターンを取得します。たとえば、一般的なボタン機能には InvokePattern コントロール パターンを、ウィンドウ機能には WindowPattern コントロール パターンを使用します。 「UI オートメーション コントロール パターンの概要」を参照してください。 |
UI を自動化します。 |
自動テスト スクリプトで、UI フレームワークの任意の UI を、UI オートメーションコントロール パターンによって公開された情報や機能を使用して制御できるようになりました。 |
関連ツールと関連技術
複数の関連ツールや関連技術で、UI オートメーションを使用した自動テストがサポートされています。
UI Spy (UISpy.exe) は、プロバイダとクライアントの開発およびデバッグのために UI オートメーションの情報を収集できるグラフィカル ユーザー インターフェイス (GUI) アプリケーションです。UI Spy は Windows Software Development Kit (SDK) に収められています。
UIAutoCmd は、UI Spy に似た機能を持つコマンド ライン ツールです。
MSAABridge は、Active Accessibility クライアントに対して UI オートメーション情報を公開します。UI オートメーションと Active Accessibility の間に継続性を持たせる主な目的は、既存の Active Accessibility クライアントが UI オートメーションを実装済みの任意のフレームワークと対話できるようにすることです。
セキュリティ
セキュリティについては、「UI オートメーションのセキュリティの概要」を参照してください。