UI オートメーションによる自動テストUsing UI Automation for Automated Testing

注意

このドキュメントは、UI オートメーションUI Automation 名前空間で定義されているマネージド System.Windows.Automation クラスを使用する .NET Framework 開発者を対象としています。This documentation is intended for .NET Framework developers who want to use the managed UI オートメーションUI Automation classes defined in the System.Windows.Automation namespace. UI オートメーションUI Automationの最新情報については、「 Windows Automation API: UI オートメーション」をご覧ください。For the latest information about UI オートメーションUI Automation, see Windows Automation API: UI Automation.

ここでは、自動テストのシナリオで、プログラムによるアクセスのためのフレームワークとして Microsoft UI オートメーションMicrosoft UI Automation がどのように役立つかについて説明します。This overview describes how Microsoft UI オートメーションMicrosoft UI Automation can be useful as a framework for programmatic access in automated testing scenarios.

UI オートメーションUI Automation の統一されたオブジェクト モデルを使用すると、すべての ユーザー インターフェイス (UI)user interface (UI) フレームワークにおいて、複雑で豊富な機能をアクセシビリティが高く自動化しやすい方法で公開できます。provides a unified object model that enables all ユーザー インターフェイス (UI)user interface (UI) frameworks to expose complex and rich functionality in an accessible and easily automated manner.

UI オートメーションUI Automation は、Microsoft Active Accessibility の後継として開発されました。was developed as a successor to Microsoft Active Accessibility. Active Accessibility は、コントロールとアプリケーションにアクセスできるようにするためのソリューションを提供するように設計された既存のフレームワークです。Active Accessibility is an existing framework designed to provide a solution for making controls and applications accessible. Active Accessibility は、ユーザー補助と自動化の非常によく似た要件があるため、テストの自動化を考慮して設計されていませんでした。Active Accessibility was not designed with test automation in mind even though it evolved into that role due to the very similar requirements of accessibility and automation. UI オートメーションUI Automationは、ユーザー補助のためのより洗練されたソリューションを提供するだけでなく、信頼性の高い自動テスト機能を提供するように設計されています。, in addition to providing more refined solutions for accessibility, is also specifically designed to provide robust functionality for automated testing. たとえば、Active Accessibility は、UI に関する情報を公開し、製品ので必要な情報を収集するために、1つのインターフェイスに依存しています。 UI オートメーションUI Automation 2 つのモデルを分離します。For example, Active Accessibility relies on a single interface to both expose information about the UI and collect the information needed by AT products; UI オートメーションUI Automation separates the two models.

UI オートメーションUI Automation を自動テスト ツールとして利用するには、プロバイダーとクライアントの両方にこれを実装する必要があります。Both a provider and client are required to implement UI オートメーションUI Automation for it to be useful as an automated test tool. UI オートメーションプロバイダーは、microsoft Word、Excel、その他のサードパーティ製アプリケーション、Microsoft Windows オペレーティングシステムに基づくコントロールなどのアプリケーションです。UI Automation providers are applications such as Microsoft Word, Excel, and other third-party applications or controls based on the Microsoft Windows operating system. UI オートメーション クライアントは、自動テスト スクリプトや支援 (補助) 技術アプリケーションなどです。UI Automation clients include automated test scripts and assistive technology applications.

注意

この概要の目的は、 UI オートメーションUI Automationの、自動テストに関する新機能と強化された機能について説明することです。The intent of this overview is to showcase the new and improved automated testing capabilities of UI オートメーションUI Automation. この概要はユーザー補助機能に関する情報の提供を目的とするものではなく、必要な場合以外、ユーザー補助については説明しません。This overview is not intended to provide information on accessibility features and will not address accessibility other than where necessary.

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

UIUI を自動化するためにアプリケーションやコントロールの開発者が注意する必要があるのは、その UIUI オブジェクトでキーボードとマウスの標準操作を使用して実行できるエンド ユーザーのアクションです。For a UIUI to be automated, a developer of an application or control must look at what actions an end-user can perform on the UIUI object using standard keyboard and mouse interaction.

これらの主要なアクションを特定したら、対応する UI オートメーションUI Automation コントロール パターン (つまり、 UIUI 要素の機能と動作をミラー化するコントロール パターン) をコントロール上に実装します。Once these key actions have been identified, the corresponding UI オートメーションUI Automation control patterns (that is, the control patterns that mirror the functionality and behavior of the UIUI element) should be implemented on the control. たとえば、コンボ ボックス コントロール (実行用のダイアログなど) でのユーザー操作には、通常、項目の一覧を非表示にしたり表示したりするためのコンボ ボックスの展開と折りたたみ、一覧からの項目の選択、またはキーボード入力による新しい値の追加が含まれます。For example, user interaction with a combo box control (such as the run dialog) typically involves expanding and collapsing the combo box to hide or display a list of items, selecting an item from that list, or adding a new value via keyboard input.

注意

他のユーザー補助モデルでは、開発者が直接、個々のボタン、メニューなどのコントロールから情報を収集する必要があります。With other accessibility models, developers must gather information directly from individual buttons, menus, or other controls. しかも、各コントロール型には、細部の異なるバリエーションが多数存在します。Unfortunately, every control type comes in dozens of minor variations. つまり、あるプッシュボタンに 10 個のバリエーションが存在すると、それらすべての動作と機能が同じであっても、それぞれを別個のコントロールとして扱う必要があります。In other words, even though ten variations of a pushbutton may all work the same way and perform the same function, they must all be treated as unique controls. これらのコントロールが機能的に同等であることを知る方法はありません。There is no way to know that these controls are functionally equivalent. コントロール パターンは、こうした共通のコントロール動作を表すために開発されました。Control patterns were developed to represent these common control behaviors. 詳細については、「 UI Automation Control Patterns Overview」を参照してください。For more information, see UI Automation Control Patterns Overview.

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

既に述べたように、 UI オートメーションUI Automationの統一されたモデルを使用しない場合、フレームワーク内のコントロールのプロパティや動作を公開するためには、フレームワーク固有の情報をテスト ツールや開発者が知る必要があります。As mentioned earlier, without the unified model provided by UI オートメーションUI Automation, test tools and developers are required to know framework-specific information in order to expose properties and behaviors of controls in that framework. Win32、Windows フォーム、Windows Presentation Foundation (WPF) など、Windows オペレーティングシステム内では、1回に複数の UI フレームワークが存在する可能性があるため、似たようなコントロールを持つ複数のアプリケーションをテストするのは困難な作業になる可能性があります。Since there can be several different UI frameworks present at any single time within Windows operating systems, including Win32, Windows Forms, and Windows Presentation Foundation (WPF), it can be a daunting task to test multiple applications with controls that seem similar. 次の表では、例として、あるボタン コントロールに関連付けられた名前 (またはテキスト) を取得するために必要なフレームワーク固有のプロパティ名と、それと同等の単一 UI オートメーションUI Automation プロパティを示します。For example, the following table outlines the framework-specific property names required to retrieve the name (or text) associated with a button control and shows the single equivalent UI オートメーションUI Automation property.

UI オートメーション コントロール型UI Automation Control Type UI フレームワークUI Framework フレームワーク固有のプロパティFramework Specific Property UI Automation のプロパティUI Automation Property
ボタンButton Windows Presentation FoundationWindows Presentation Foundation ContentContent NamePropertyNameProperty
ボタンButton Win32Win32 CaptionCaption NamePropertyNameProperty
ImageImage HTMLHTML altalt NamePropertyNameProperty

UI オートメーション プロバイダーは、そのコントロールのフレームワーク固有のプロパティから、同等の UI オートメーションUI Automation プロパティへのマッピングを行います。UI Automation providers are responsible for mapping the framework-specific properties of their controls to the equivalent UI オートメーションUI Automation properties.

プロバイダーに実装する方法については UI オートメーションUI Automation 、「 マネージコードの UI オートメーションプロバイダー」を参照してください。Information on implementing UI オートメーションUI Automation in a provider can be found at UI Automation Providers for Managed Code. コントロール パターンを実装する方法については、「 UI Automation Control Patterns 」および「 UI Automation Text Pattern」を参照してください。Information on implementing control patterns is available at UI Automation Control Patterns and UI Automation Text Pattern.

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

多くの自動テスト ツールやシナリオの目的は、一貫性があって再現可能なユーザー インターフェイス操作です。The goal of many automated test tools and scenarios is the consistent and repeatable manipulation of the user interface. これには、特定のコントロールの単体テストから、コントロールのグループに対する一連の一般的なアクションを反復処理するテスト スクリプトの記録と再生までが含まれます。This can involve unit testing specific controls through to the recording and playback of test scripts that iterate through a series of generic actions on a group of controls.

自動アプリケーションでの問題は、動的な対象にテストを合わせることが難しい点です。A complication that arises from automated applications is the difficulty synchronizing a test with a dynamic target. たとえば、Windows タスク マネージャーに含まれているような、現在実行中のアプリケーションを一覧表示するリスト ボックス コントロールがあります。For example, a list box control, such as one contained in the Windows Task Manager, that displays a list of currently running applications. リスト ボックス内の項目はテスト アプリケーションの制御範囲外で動的に更新されるため、リスト ボックスの特定の項目を一貫性を保って繰り返し選択することは不可能です。Since the items in the list box are dynamically updated outside the control of the test application, attempting to repeat the selection of a specific item in the list box with any consistency is impossible. テスト アプリケーションの制御範囲外の UIUI でフォーカスの単純な変更を繰り返そうとした場合も、同様の問題が起きることがあります。Similar issues can also arise when attempting to repeat simple focus changes in a UIUI that is outside the control of the test application.

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

プログラムによるアクセスでは、従来のマウス入力やキーボード入力によって公開される対話やエクスペリエンスをコードによって模倣する機能が提供されます。Programmatic access provides the ability to imitate, through code, any interaction and experience exposed by traditional mouse and keyboard input. UI オートメーションUI Automation は、5 つのコンポーネントにより、プログラムによるアクセスを有効にします。enables programmatic access through five components:

  • UI オートメーションUI Automation ツリーは、 UIUIの構造全体にわたってナビゲーションを容易にします。The UI オートメーションUI Automation tree facilitates navigation through the structure of the UIUI. ツリーは、hWnd のツリーのコレクションから構築されます。The tree is built from the collection of hWnd's. 詳細については、「 UI Automation Tree Overview」を参照してください。For more information, see UI Automation Tree Overview

  • オートメーション要素は、 UIUIの個々のコンポーネントです。Automation elements are individual components in the UIUI. 通常、これらは hWnd よりも細かい単位です。These can often be more granular than an hWnd. 詳細については、「 UI Automation Control Types Overview」を参照してください。For more information, see UI Automation Control Types Overview.

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

  • コントロール パターンは、コントロールが持つ機能の特定の側面を定義します。プロパティ、メソッド、イベント、および構造体の情報で構成することができます。Control patterns define a particular aspect of a control's functionality; they can consist of property, method, event, and structure information. 詳細については、「 UI Automation Control Patterns Overview」を参照してください。For more information, see UI Automation Control Patterns Overview.

  • オートメーション イベントは、イベント通知と情報を提供します。Automation events provide event notifications and information. 詳細については、「 UI Automation Events Overview」を参照してください。For more information, see UI Automation Events Overview.

自動テストの主要なプロパティKey Properties for Test Automation

UIUI 内の任意のコントロールを一意に識別して検索する機能は、自動テスト アプリケーションがその UIUIを処理する基盤です。The ability to uniquely identify and subsequently locate any control within the UIUI provides the basis for automated test applications to operate on that UIUI. Microsoft UI オートメーションMicrosoft UI Automation プロパティの中にはこれを支援するものがいくつかあり、クライアントとプロバイダーによって使用されます。There are several Microsoft UI オートメーションMicrosoft UI Automation properties used by clients and providers that assist in this.

AutomationIDAutomationID

オートメーション要素をその兄弟から一意に識別します。Uniquely identifies an automation element from its siblings. 製品が複数言語で出荷される場合に通常ローカライズされるAutomationIdProperty などのプロパティとは異なり、 NameProperty はローカライズされません。AutomationIdProperty is not localized, unlike a property such as NameProperty that is typically localized if a product gets shipped in multiple languages. Use the AutomationID Property」を参照してください。See Use the AutomationID Property.

注意

AutomationIdProperty では、オートメーション ツリー全体にわたって一意に識別できるとは限りません。AutomationIdProperty does not guarantee a unique identity throughout the automation tree. たとえば、アプリケーションには複数のトップレベルのメニュー項目を持つメニュー コントロールが含まれ、さらに、それらのメニュー項目に複数の子メニュー項目が含まれている場合があります。For example, an application may contain a menu control with multiple top-level menu items that, in turn, have multiple child menu items. これらの 2 次メニュー項目は、Item1、Item2、Item3 などの汎用スキームで識別され、トップレベルのメニュー項目間で子の識別子が重複することがあります。These secondary menu items may be identified by a generic scheme such as "Item1, Item 2, Item3, etc.", allowing duplicate identifiers for children across top-level menu items.

ControlTypeControlType

オートメーション要素によって表されるコントロール型を識別します。Identifies the type of control represented by an automation element. コントロール型がわかると、そこから多くの情報を推測できます。Significant information can be inferred from knowledge of the control type. UI Automation Control Types Overview」を参照してください。See UI Automation Control Types Overview.

NamePropertyNameProperty

これは、コントロールを識別または説明するテキスト文字列です。This is a text string that identifies or explains a control. NameProperty はローカライズされる可能性があるため、注意して使用する必要があります。NameProperty should be used with caution since it can be localized. UI Automation Properties Overview」を参照してください。See UI Automation Properties Overview.

テスト アプリケーションへの UI オートメーションの実装Implementing UI Automation in a Test Application

UI オートメーション参照を追加します。Add the UI Automation References. UI オートメーション クライアントに必要な UI オートメーションUI Automation の dll を次に示します。The UI オートメーションUI Automation dll's necessary for UI Automation clients are listed here.

-UIAutomationClient.dll を使用すると、 UI オートメーションUI Automation クライアント側の api にアクセスできます。- UIAutomationClient.dll provides access to the UI オートメーションUI Automation client-side APIs.
-UIAutomationClientSideProvider.dll は、Win32 コントロールを自動化する機能を提供します。- UIAutomationClientSideProvider.dll provides the ability to automate Win32 controls. UI Automation Support for Standard Controls」を参照してください。See UI Automation Support for Standard Controls.
-UIAutomationTypes.dll は、「」で定義されている特定の型へのアクセスを提供 UI オートメーションUI Automation します。- UIAutomationTypes.dll provides access to the specific types defined in UI オートメーションUI Automation.
System.Windows.Automation 名前空間を追加します。Add the System.Windows.Automation namespace. この名前空間には、 UI オートメーションUI Automation のテキスト処理以外の機能を使用するために UI オートメーション クライアントが必要とするすべてのものが含まれています。This namespace contains everything UI Automation clients need to use the capabilities of UI オートメーションUI Automation except text handling.
System.Windows.Automation.Text 名前空間を追加します。Add the System.Windows.Automation.Text namespace. この名前空間には、 UI オートメーションUI Automation のテキスト処理機能を使用するために UI オートメーション クライアントが必要とするすべてのものが含まれています。This namespace contains everything a UI Automation clients need to use the capabilities of UI オートメーションUI Automation text handling.
目的のコントロールを検索します。Find controls of interest 自動テスト スクリプトは、目的のコントロールを表す UI オートメーション要素をオートメーション ツリー内で検索します。Automated test scripts locate UI Automation elements that represent controls of interest within the automation tree.

コードで UI オートメーション要素を取得する方法は複数あります。There are multiple ways to obtain UI Automation elements with code.

-ステートメントを使用してにクエリを実行し UIUI Condition ます。- Query the UIUI using a Condition statement. この場合は、通常、言語に依存しない AutomationIdProperty を使用します。This is typically where the language-neutral AutomationIdProperty is used. 注: は、 AutomationIdProperty コントロールのプロパティを設定できる Inspect.exe などのツールを使用して取得でき UI オートメーションUI Automation ます。Note: An AutomationIdProperty can be obtained using a tool such as Inspect.exe that is able to itemize the UI オートメーションUI Automation properties of a control.

- TreeWalker ツリー全体またはそのサブセットを走査するには、クラスを使用し UI オートメーションUI Automation ます。- Use the TreeWalker class to traverse the entire UI オートメーションUI Automation tree or a subset thereof.
-フォーカスを追跡します。- Track focus.
-コントロールの hWnd を使用します。- Use the hWnd of the control.
-マウスカーソルの位置など、画面の場所を使用します。- Use screen location, such as the location of the mouse cursor.

Obtaining UI Automation Elements」を参照してください。See Obtaining UI Automation Elements
コントロール パターンを取得します。Obtain Control Patterns コントロール パターンは、機能的によく似た複数のコントロールにおける共通の動作を公開します。Control patterns expose common behaviors for functionally similar controls.

自動テスト スクリプトは、テストする必要があるコントロールを特定すると、それらの UI オートメーション要素から目的のコントロール パターンを取得します。After locating the controls that require testing, automated test scripts obtain the control patterns of interest from those UI Automation elements. たとえば、一般的なボタン機能には InvokePattern コントロール パターンを、ウィンドウ機能には WindowPattern コントロール パターンを使用します。For example, the InvokePattern control pattern for typical button functionality or the WindowPattern control pattern for window functionality.

UI Automation Control Patterns Overview」を参照してください。See UI Automation Control Patterns Overview.
UI を自動化します。Automate the UI 自動テスト スクリプトで、 UIUI フレームワークの任意の UIUI を、 UI オートメーションUI Automation コントロール パターンによって公開された情報や機能を使用して制御できるようになりました。Automated test scripts can now control any UIUI of interest from a UIUI framework using the information and functionality exposed by the UI オートメーションUI Automation control patterns.

複数の関連ツールや関連技術で、 UI オートメーションUI Automationを使用した自動テストがサポートされています。There are a number of related tools and technologies that support automated testing with UI オートメーションUI Automation.

  • Inspect.exe は、 UI オートメーションUI Automation プロバイダーとクライアントの両方の開発とデバッグに関する情報を収集するために使用できるグラフィカルユーザーインターフェイス (GUI) アプリケーションです。Inspect.exe is a graphical user interface (GUI) application that can be used to gather UI オートメーションUI Automation information for both provider and client development and debugging. Windows SDK には Inspect.exe が含まれています。Inspect.exe is included in the Windows SDK.

  • MSAABridge UI オートメーションUI Automation は、Active Accessibility クライアントに情報を公開します。MSAABridge exposes UI オートメーションUI Automation information to Active Accessibility clients. Active Accessibility にブリッジングする主な目的 UI オートメーションUI Automation は、既存の Active Accessibility クライアントが、実装されている任意のフレームワークと対話できるようにすることです UI オートメーションUI AutomationThe primary goal of bridging UI オートメーションUI Automation to Active Accessibility is to allow existing Active Accessibility clients the ability to interact with any framework that has implemented UI オートメーションUI Automation.

セキュリティSecurity

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

関連項目See also