UI オートメーションを使用した自動テスト
- [アーティクル]
-
-
注意
このドキュメントは、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 オートメーション クライアントには、自動テスト スクリプトと支援技術アプリケーションが含まれます。
注意
この概要の目的は、UI オートメーションの新しく改善された自動テスト機能を紹介することです。 この概要は、アクセシビリティ機能に関する情報を提供するためのものではなく、必要な場合以外のアクセシビリティには対応しません。
UI を自動化するには、アプリケーションまたはコントロールの開発者は、標準キーボードとマウス操作を使用して、エンド ユーザーが UI オブジェクトに対して実行できるアクションを確認する必要があります。
これらの主要なアクションが特定されたら、対応する UI オートメーション コントロール パターン (つまり、UI 要素の機能と動作を反映するコントロール パターン) をコントロールに実装する必要があります。 たとえば、コンボ ボックス コントロール (実行ダイアログなど) とのユーザー操作では、通常、コンボ ボックスを展開して折りたたんで項目のリストを非表示または表示したり、そのリストから項目を選択したり、キーボード入力を使用して新しい値を追加したりできます。
注意
他のアクセシビリティ モデルでは、開発者は個々のボタン、メニュー、またはその他のコントロールから直接情報を収集する必要があります。 残念ながら、すべてのコントロールの種類には、多数の小さなバリエーションがあります。 つまり、押ボタンの 10 個のバリエーションがすべて同じように動作し、同じ機能を実行する場合でも、それらはすべて一意のコントロールとして扱う必要があります。 これらのコントロールが機能的に同等であることを知る方法はありません。 コントロール パターンは、これらの一般的な制御動作を表すために開発されました。 詳細については、「UI オートメーション コントロール パターンの概要」を参照してください。
前述のように、UI オートメーションによって提供される統合モデルがない場合、テスト ツールと開発者は、そのフレームワーク内のコントロールのプロパティと動作を公開するために、フレームワーク固有の情報を知る必要があります。 Win32、Windows フォーム、Windows Presentation Foundation (WPF) など、Windows オペレーティング システム内には一度に複数の異なる UI フレームワークが存在する可能性があるため、似たコントロールを使用して複数のアプリケーションをテストするのは困難な作業になる可能性があります。 たとえば、次の表は、ボタン コントロールに関連付けられている名前 (またはテキスト) を取得するために必要なフレームワーク固有のプロパティ名の概要を示し、同等の UI オートメーション プロパティを 1 つ示しています。
UI オートメーション コントロールの種類 |
UI フレームワーク |
フレームワーク固有のプロパティ |
UI オートメーション プロパティ |
ボタン |
Windows Presentation Foundation |
コンテンツ |
NameProperty |
ボタン |
Win32 |
キャプション |
NameProperty |
画像 |
HTML |
alt |
NameProperty |
UI オートメーション プロバイダーは、コントロールのフレームワーク固有のプロパティを同等の UI オートメーション プロパティにマッピングする役割を担います。
プロバイダーでの UI オートメーションの実装については、マネージド コード の UI オートメーション プロバイダーを参照してください。 コントロール パターンの実装に関する情報は、UI オートメーション コントロール パターンの と UI オートメーション テキスト パターンで入手できます。
多くの自動テスト ツールとシナリオの目標は、ユーザー インターフェイスの一貫性のある反復可能な操作です。 これには、特定のコントロールを単体テストして、一連のコントロールに対する一連の一般的なアクションを反復処理するテスト スクリプトの記録と再生が含まれる場合があります。
自動化されたアプリケーションから生じる複雑さは、テストを動的ターゲットと同期するのが難しいことです。 たとえば、Windows タスク マネージャーに含まれているリスト ボックス コントロールなど、現在実行中のアプリケーションの一覧を表示します。 リスト ボックス内の項目はテスト アプリケーションの制御外で動的に更新されるため、一貫性のあるリスト ボックス内の特定の項目の選択を繰り返そうとすることは不可能です。 テスト アプリケーションの制御外にある UI で単純なフォーカス変更を繰り返そうとしたときにも、同様の問題が発生する可能性があります。
プログラムによるアクセスを使用すると、従来のマウスとキーボードの入力によって公開される操作やエクスペリエンスを、コードを通じて模倣することができます。 UI オートメーションを使用すると、次の 5 つのコンポーネントを使用してプログラムからアクセスできます。
UI 内のコントロールを一意に識別し、その後で特定する機能は、自動化されたテスト アプリケーションがその UI で動作するための基礎となります。 これを支援するクライアントとプロバイダーによって使用される Microsoft UI オートメーション プロパティがいくつかあります。
オートメーション要素を兄弟から一意に識別します。 AutomationIdProperty はローカライズされません。製品が複数の言語で出荷される場合に通常ローカライズされる NameProperty などのプロパティとは異なります。 「AutomationID プロパティの使用」を参照してください。
注意
AutomationIdProperty では、オートメーション ツリー全体で一意の ID が保証されるわけではありません。 たとえば、アプリケーションには、複数の最上位メニュー項目を含むメニュー コントロールが含まれている場合があり、そのメニュー項目には複数の子メニュー項目があります。 これらの 2 次メニュー項目は、Item1、Item2、Item3 などの汎用スキームで識別され、トップレベルのメニュー項目間で子の識別子が重複することがあります。
オートメーション要素によって表されるコントロールの種類を識別します。 重要な情報は、コントロール型の知識から推測できます。 「UI オートメーション コントロールの種類の概要」を参照してください。
これは、コントロールを識別または説明するテキスト文字列です。 ローカライズできるため、NameProperty は慎重に使用する必要があります。 「UI オートメーション プロパティの概要」を参照してください。
テスト アプリケーションでの UI オートメーションの実装
ステップ |
説明 |
UI オートメーション参照を追加します。 |
UI オートメーション クライアントに必要な UI オートメーション dll の一覧を次に示します。
- UIAutomationClient.dll は、UI オートメーションのクライアント側 API へのアクセスを提供します。 - UIAutomationClientSideProvider.dll Win32 コントロールを自動化する機能が提供されます。 「標準コントロール の UI オートメーションのサポートについては、を参照してください。」 - UIAutomationTypes.dll は、UI オートメーションで定義されている特定の型へのアクセスを提供します。 |
System.Windows.Automation 名前空間を追加します。 |
この名前空間には、UI オートメーション クライアントがテキスト処理を除く UI オートメーションの機能を使用するために必要なすべてのものが含まれています。 |
System.Windows.Automation.Text 名前空間を追加します。 |
この名前空間には、UI オートメーション クライアントが UI オートメーションテキスト処理の機能を使用するために必要なすべてのものが含まれています。 |
目的のコントロールを検索します。 |
自動化されたテスト スクリプトは、オートメーション ツリー内の目的のコントロールを表す UI オートメーション要素を見つけます。
コードを使用して UI オートメーション要素を取得する方法は複数あります。
- Condition ステートメントを使用して UI にクエリを実行します。 これは通常、言語に依存しない AutomationIdProperty が使用される場所です。 注: コントロールの UI オートメーション プロパティをアイテム化できる Inspect.exe などのツールを使用して、AutomationIdProperty を取得できます。
- TreeWalker クラスを使用して、UI オートメーション ツリー全体またはそのサブセットを走査します。 - フォーカスを追跡します。 - コントロールの hWnd を使用します。 - マウス カーソルの位置など、画面の位置を使用します。
「UI オートメーション要素の取得」 を参照してください。 |
コントロール パターンを取得します。 |
コントロール パターンは、機能的に似たコントロールの一般的な動作を公開します。
テストを必要とするコントロールを見つけた後、自動化されたテスト スクリプトは、それらの UI オートメーション要素から目的のコントロール パターンを取得します。 たとえば、一般的なボタン機能の InvokePattern コントロール パターンや、ウィンドウ機能の WindowPattern コントロール パターンなどです。
「UI オートメーション コントロール パターンの概要」を参照してください。 |
UI を自動化します。 |
自動化されたテスト スクリプトでは、UI オートメーション コントロール パターンによって公開される情報と機能を使用して、UI フレームワークから目的の UI を制御できるようになりました。 |
UI オートメーションによる自動テストをサポートする関連するツールとテクノロジは多数あります。
Inspect.exe は、プロバイダーとクライアントの開発とデバッグの両方の UI オートメーション情報を収集するために使用できるグラフィカル ユーザー インターフェイス (GUI) アプリケーションです。 Inspect.exe は Windows SDK に含まれています。
MSAABridge は、UI オートメーション情報を Active Accessibility クライアントに公開します。 UI オートメーションを Active Accessibility にブリッジする主な目標は、既存の Active Accessibility クライアントが UI オートメーションを実装しているフレームワークと対話できるようにすることです。
セキュリティ情報については、「UI Automation のセキュリティの概要」を参照してください。