UI オートメーションによる自動テスト

Note

このドキュメントは、System.Windows.Automation 名前空間で定義されているマネージド UI オートメーション クラスを使用する .NET Framework 開発者を対象としています。 UI オートメーションの最新情報については、Windows Automation API の「UI オートメーション」を参照してください。

この概要では、自動テストのシナリオで、プログラムによるアクセスのためのフレームワークとして 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 オートメーション クライアントは、自動テスト スクリプトや支援 (補助) 技術アプリケーションなどです。

Note

この概要の目的は、UI オートメーションの、自動テストに関する新機能と強化された機能について説明することです。 この概要はユーザー補助機能に関する情報の提供を目的とするものではなく、必要な場合以外、ユーザー補助については説明しません。

プロバイダーにおける UI オートメーション

UI を自動化するためにアプリケーションやコントロールの開発者が注意する必要があるのは、その UI オブジェクトでキーボードとマウスの標準操作を使用して実行できるエンド ユーザーのアクションです。

これらの主要なアクションを特定したら、対応する UI オートメーション コントロール パターン (つまり、UI 要素の機能と動作をミラー化するコントロール パターン) をコントロール上に実装します。 たとえば、コンボ ボックス コントロール (実行用のダイアログなど) でのユーザー操作には、通常、項目の一覧を非表示にしたり表示したりするためのコンボ ボックスの展開と折りたたみ、一覧からの項目の選択、またはキーボード入力による新しい値の追加が含まれます。

Note

他のユーザー補助モデルでは、開発者が直接、個々のボタン、メニューなどのコントロールから情報を収集する必要があります。 しかも、各コントロール型には、細部の異なるバリエーションが多数存在します。 つまり、あるプッシュボタンに 10 個のバリエーションが存在すると、それらすべての動作と機能が同じであっても、それぞれを別個のコントロールとして扱う必要があります。 これらのコントロールが機能的に同等であることを知る方法はありません。 コントロール パターンは、こうした共通のコントロール動作を表すために開発されました。 詳細については、「 UI Automation Control Patterns Overview」を参照してください。

UI オートメーションの実装

既に述べたように、UI オートメーションの統一されたモデルを使用しない場合、フレームワーク内のコントロールのプロパティや動作を公開するためには、フレームワーク固有の情報をテスト ツールや開発者が知る必要があります。 Windows オペレーティング システム内には常に、Win32、Windows フォーム、Windows Presentation Foundation (WPF) などの複数の UI フレームワークが存在する可能性があるため、似たようなコントロールを持つ複数のアプリケーションをテストすることは困難な場合があります。 例として、次の表に、あるボタン コントロールに関連付けられた名前 (またはテキスト) を取得するために必要なフレームワーク固有のプロパティ名と、それと同等で単一の UI オートメーション プロパティを示します。

UI オートメーション コントロール型 UI フレームワーク フレームワーク固有のプロパティ UI Automation のプロパティ
ボタン Windows Presentation Foundation Content NameProperty
ボタン Win32 Caption NameProperty
Image HTML alt NameProperty

UI オートメーション プロバイダーにより、そのコントロールのフレームワーク固有のプロパティから、同等の UI オートメーション プロパティへのマッピングが行われます。

プロバイダーへの UI オートメーションの実装については、「マネージド コードの UI オートメーション プロバイダー」を参照してください。 コントロール パターンを実装する方法については、「 UI Automation Control Patterns 」および「 UI Automation Text Pattern」を参照してください。

クライアントにおける UI オートメーション

多くの自動テスト ツールやシナリオの目的は、一貫性があって再現可能なユーザー インターフェイス操作です。 これには、特定のコントロールの単体テストから、コントロールのグループに対する一連の一般的なアクションを反復処理するテスト スクリプトの記録と再生までが含まれます。

自動アプリケーションでの問題は、動的な対象にテストを合わせることが難しい点です。 たとえば、Windows タスク マネージャーに含まれているような、現在実行中のアプリケーションを一覧表示するリスト ボックス コントロールがあります。 リスト ボックス内の項目はテスト アプリケーションの制御範囲外で動的に更新されるため、リスト ボックスの特定の項目を一貫性を保って繰り返し選択することは不可能です。 テスト アプリケーションの制御範囲外の UI でフォーカスの単純な変更を繰り返そうとした場合も、同様の問題が起きることがあります。

プログラムによるアクセス

プログラムによるアクセスでは、従来のマウス入力やキーボード入力によって公開される対話やエクスペリエンスをコードによって模倣する機能が提供されます。 UI オートメーションは、5 つのコンポーネントにより、プログラムによるアクセスを有効にします。

  • UI オートメーション ツリーは、UI の構造全体にわたってナビゲーションを容易にします。 ツリーは、hWnd のツリーのコレクションから構築されます。 詳細については、「 UI Automation Tree Overview」を参照してください。

  • オートメーション要素は、UI の個々のコンポーネントです。 通常、これらは hWnd よりも細かい単位です。 詳細については、「 UI Automation Control Types Overview」を参照してください。

  • オートメーション プロパティは、UI 要素に関する具体的な情報を提供します。 詳細については、「 UI Automation Properties Overview」を参照してください。

  • コントロール パターンは、コントロールが持つ機能の特定の側面を定義します。プロパティ、メソッド、イベント、および構造体の情報で構成することができます。 詳細については、「 UI Automation Control Patterns Overview」を参照してください。

  • オートメーション イベントは、イベント通知と情報を提供します。 詳細については、「 UI Automation Events Overview」を参照してください。

自動テストの主要なプロパティ

UI 内の任意のコントロールを一意に識別してから、検索する機能により、自動テスト アプリケーションがその UI を処理する基盤が提供されます。 Microsoft UI オートメーション プロパティの中にはこれを支援するものがいくつかあり、クライアントとプロバイダーによって使用されます。

AutomationID

オートメーション要素をその兄弟から一意に識別します。 製品が複数言語で出荷される場合に通常ローカライズされるAutomationIdProperty などのプロパティとは異なり、 NameProperty はローカライズされません。 「 Use the AutomationID Property」を参照してください。

Note

AutomationIdProperty では、オートメーション ツリー全体にわたって一意に識別できるとは限りません。 たとえば、アプリケーションには複数のトップレベルのメニュー項目を持つメニュー コントロールが含まれ、さらに、それらのメニュー項目に複数の子メニュー項目が含まれている場合があります。 これらの 2 次メニュー項目は、Item1、Item2、Item3 などの汎用スキームで識別され、トップレベルのメニュー項目間で子の識別子が重複することがあります。

ControlType

オートメーション要素によって表されるコントロール型を識別します。 コントロール型がわかると、そこから多くの情報を推測できます。 「 UI Automation Control Types Overview」を参照してください。

NameProperty

これは、コントロールを識別または説明するテキスト文字列です。 NameProperty はローカライズされる可能性があるため、注意して使用する必要があります。 「 UI Automation Properties Overview」を参照してください。

テスト アプリケーションへの UI オートメーションの実装

手順 説明
UI オートメーション参照を追加します。 UI オートメーション クライアントに必要な UI オートメーションの dll を次に示します。

- UIAutomationClient.dll により、UI オートメーションのクライアント側 API へのアクセスが提供されます。
- UIAutomationClientSideProvider.dll により、Win32 コントロールを自動化する機能が提供されます。 「 UI Automation Support for Standard Controls」を参照してください。
- UIAutomationTypes.dll により、UI オートメーションで定義された特定の型へのアクセスが提供されます。
System.Windows.Automation 名前空間を追加します。 この名前空間には、UI オートメーションのテキスト処理以外の機能を使用するために UI オートメーション クライアントが必要とするものがすべて含まれています。
System.Windows.Automation.Text 名前空間を追加します。 この名前空間には、UI オートメーションのテキスト処理の機能を使用するために UI オートメーション クライアントが必要とするすべてのものが含まれています。
目的のコントロールを検索します。 自動テスト スクリプトは、目的のコントロールを表す UI オートメーション要素をオートメーション ツリー内で検索します。

コードで UI オートメーション要素を取得する方法は複数あります。

- Condition ステートメントを使用して UI のクエリを実行します。 この場合は、通常、言語に依存しない AutomationIdProperty を使用します。 注:AutomationIdProperty は、コントロールの UI オートメーション プロパティを項目別に示すことができる Inspect.exe などのツールを使用して取得できます。

- UI オートメーション ツリー全体またはそのサブセットを走査するには、TreeWalker クラスを使用します。
- フォーカスを追跡します。
- コントロールの hWnd を使用します。
- マウス カーソルの位置など、画面位置を使用します。

Obtaining UI Automation Elements」を参照してください。
コントロール パターンを取得します。 コントロール パターンは、機能的によく似た複数のコントロールにおける共通の動作を公開します。

自動テスト スクリプトは、テストする必要があるコントロールを特定すると、それらの UI オートメーション要素から目的のコントロール パターンを取得します。 たとえば、一般的なボタン機能には InvokePattern コントロール パターンを、ウィンドウ機能には WindowPattern コントロール パターンを使用します。

UI Automation Control Patterns Overview」を参照してください。
UI を自動化します。 自動テスト スクリプトで、UI フレームワークの任意の UI を、UI オートメーション コントロール パターンによって公開された情報や機能を使用して制御できるようになりました。

複数の関連ツールや関連技術で、UI オートメーションを使用した自動テストがサポートされています。

  • Inspect.exe は、UI オートメーションの情報を収集してプロバイダーとクライアントを開発およびデバッグするために使用できるグラフィカル ユーザー インターフェイス (GUI) アプリケーションです。 Inspect.exe は Windows SDK に含まれています。

  • MSAABridge により、Active Accessibility クライアントに対する UI オートメーション情報が公開されます。 UI オートメーションと Active Accessibility の間に継続性を持たせる主な目的は、既存の Active Accessibility クライアントが UI オートメーションを実装済みの任意のフレームワークとやりとりできるようにすることです。

セキュリティ

セキュリティについては、「 UI Automation Security Overview」を参照してください。

関連項目