UI 자동화 요소 가져오기Obtaining UI Automation Elements

참고

이 설명서는 System.Windows.Automation 네임스페이스에 정의된 관리되는 UI 자동화UI 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 자동화 API: UI 자동화를 참조하세요.For the latest information about UI 자동화UI Automation, see Windows Automation API: UI Automation.

이 항목에서는 AutomationElement 요소에 대한 UI(사용자 인터페이스)user interface (UI) 개체를 가져오는 다양한 방법을 설명합니다.This topic describes the various ways of obtaining AutomationElement objects for UI(사용자 인터페이스)user interface (UI) elements.

주의

클라이언트 애플리케이션이 자체 사용자 인터페이스에서 요소를 찾으려고 시도하는 경우 별도 스레드에서 모든 UI 자동화UI Automation 을 호출해야 합니다.If your client application might attempt to find elements in its own user interface, you must make all UI 자동화UI Automation calls on a separate thread. 자세한 내용은 UI Automation Threading Issues을 참조하세요.For more information, see UI Automation Threading Issues.

루트 요소Root Element

AutomationElement 개체에 대한 모든 검색은 시작 지점이 있어야 합니다.All searches for AutomationElement objects must have a starting-place. 데스크톱, 애플리케이션 창 또는 컨트롤을 포함한 모든 요소가 대상이 될 수 있습니다.This can be any element, including the desktop, an application window, or a control.

모든 요소가 하위 항목인 데스크톱의 루트 요소는 정적 AutomationElement.RootElement 속성에서 가져옵니다.The root element for the desktop, from which all elements are descended, is obtained from the static AutomationElement.RootElement property.

주의

일반적으로 RootElement의 직계 자식 항목만 가져와야 합니다.In general, you should try to obtain only direct children of the RootElement. 하위 항목 검색은 수 많은 요소에서 반복될 수 있기 때문에 스택 오버플로가 발생할 수 있습니다.A search for descendants may iterate through hundreds or even thousands of elements, possibly resulting in a stack overflow. 낮은 수준의 특정 요소를 가져오려고 시도하는 경우, 낮은 수준의 컨테이너 또는 애플리케이션 창에서 검색을 시작해야 합니다.If you are attempting to obtain a specific element at a lower level, you should start your search from the application window or from a container at a lower level.

조건Conditions

UI 자동화UI Automation 요소를 검색할 때 사용할 수 있는 대부분의 기술에 대해, 검색할 요소가 무엇인지 정의하는 기준 집합인 Condition을 지정해야 합니다.For most techniques you can use to retrieve UI 자동화UI Automation elements, you must specify a Condition, which is a set of criteria defining what elements you want to retrieve.

가장 간단한 조건은 TrueCondition으로서, 검색 범위 내의 모든 요소가 반환되도록 하는 미리 정의된 개체입니다.The simplest condition is TrueCondition, a predefined object specifying that all elements within the search scope are to be returned. FalseCondition과는 반대로 TrueCondition은 요소가 검색되지 않도록 하기 때문에 그다지 유용하지 않습니다.FalseCondition, the converse of TrueCondition, is less useful, as it would prevent any elements from being found.

단독으로 또는 다른 조건과 함께 사용할 수 있는 기타 미리 정의된 3개의 조건으로 ContentViewCondition, ControlViewConditionRawViewCondition이 있습니다.Three other predefined conditions can be used alone or in combination with other conditions: ContentViewCondition, ControlViewCondition, and RawViewCondition. 단독으로 사용되는은 또는 속성별로 요소를 필터링하지 않기 때문에 에 해당합니다.RawViewCondition, used by itself, is equivalent to TrueCondition, because it does not filter elements by their IsControlElement or IsContentElement properties.

하나 이상의 PropertyCondition 개체에서 기타 조건이 생성되고, 각 조건은 속성 값을 지정합니다.Other conditions are built up from one or more PropertyCondition objects, each of which specifies a property value. 예를 들어, PropertyCondition 은 요소가 활성화되도록 지정하거나 특정 컨트롤 패턴을 지원하도록 지정할 수 있습니다.For example, a PropertyCondition might specify that the element is enabled, or that it supports a certain control pattern.

개체 형식 AndCondition, OrConditionNotCondition을 생성하고 부울 논리를 사용하여 조건을 조합할 수 있습니다.Conditions can be combined using Boolean logic by constructing objects of types AndCondition, OrCondition, and NotCondition.

검색 범위Search Scope

FindFirst 또는 FindAll 을 사용하여 수행되는 검색에는 시작 지점뿐만 아니라 범위가 있어야 합니다.Searches done by using FindFirst or FindAll must have a scope as well as a starting-place.

범위는 검색되는 시작 지점 주변의 공간을 정의합니다.The scope defines the space around the starting-place that is to be searched. 여기에는 요소 자체, 형제 항목, 부모 항목, 상위 항목, 직계 자식 항목, 하위 항목이 포함될 수 있습니다.This might include the element itself, its siblings, its parent, its ancestors, its immediate children, and its descendants.

검색 범위는 TreeScope 열거형의 값을 비트 조합하여 정의됩니다.The scope of a search is defined by a bitwise combination of values from the TreeScope enumeration.

알려진 요소 찾기Finding a Known Element

Name, AutomationId또는 기타 속성이나 속성의 조합으로 식별된 알려진 요소를 찾으려면 FindFirst 메서드를 사용하는 것이 가장 쉬운 방법입니다.To find a known element, identified by its Name, AutomationId, or some other property or combination of properties, it is easiest to use the FindFirst method. 검색된 요소가 애플리케이션 창일 경우 검색의 시작 지점은 RootElement일 수 있습니다.If the element sought is an application window, the starting-point of the search can be the RootElement.

이렇게 UI 자동화UI Automation 요소를 찾는 것은 자동화된 테스트 시나리오에서 가장 유용한 방법입니다.This way of finding UI 자동화UI Automation elements is most useful in automated testing scenarios.

하위 트리에서 요소 찾기Finding Elements in a Subtree

알려진 요소와 관련된 특정 기준을 충족하는 모든 요소를 찾으려면 FindAll을 사용합니다.To find all elements meeting specific criteria that are related to a known element, you can use FindAll. 예를 들어, 목록 또는 메뉴에서 목록 항목이나 메뉴 항목을 검색하거나 대화 상자의 모든 컨트롤을 식별할 때 이 메서드를 사용할 수 있습니다.For example, you could use this method to retrieve list items or menu items from a list or menu, or to identify all controls in a dialog box.

하위 트리 탐색Walking a Subtree

클라이언트가 사용되는 애플리케이션에 대한 사전 지식이 없는 경우 TreeWalker 클래스를 사용하여 필요한 모든 요소의 하위 트리를 생성할 수 있습니다.If you have no prior knowledge of the applications that your client may be used with, you can construct a subtree of all elements of interest by using the TreeWalker class. 애플리케이션이 포커스 변경 이벤트에 대한 응답으로 이 작업을 수행할 수 있습니다. 즉, 애플리케이션 또는 컨트롤이 입력 포커스를 받으면 UI 자동화 클라이언트는 포커스가 있는 요소의 자식 항목 및 모든 하위 항목을 검사합니다.Your application might do this in response to a focus-changed event; that is, when an application or control receives input focus, the UI Automation client examines children and perhaps all descendants of the focused element.

TreeWalker 를 사용하여 요소의 상위 항목을 식별할 수도 있습니다.Another way in which TreeWalker can be used is to identify the ancestors of an element. 예를 들어, 트리를 탐색하여 컨트롤의 부모 창을 식별할 수 있습니다.For example, by walking up the tree you can identify the parent window of a control.

필요한 클래스의 개체를 만들거나( TreeWalker 을 전달하여 필요한 요소 정의) Condition의 필드로 정의된 미리 정의된 다음 개체 중 하나를 사용하여 TreeWalker를 사용할 수 있습니다.You can use TreeWalker either by creating an object of the class (defining the elements of interest by passing a Condition), or by using one of the following predefined objects that are defined as fields of TreeWalker.

ContentViewWalker IsContentElement 속성이 true인 요소만 찾습니다.Finds only elements whose IsContentElement property is true.
ControlViewWalker IsControlElement 속성이 true인 요소만 찾습니다.Finds only elements whose IsControlElement property is true.
RawViewWalker 모든 요소를 찾습니다.Finds all elements.

TreeWalker를 가져온 후에는 간단하게 사용할 수 있습니다.After you have obtained a TreeWalker, using it is straightforward. Get 메서드를 호출하여 하위 트리의 요소를 탐색하면 됩니다.Simply call the Get methods to navigate among elements of the subtree.

Normalize 메서드를 사용하여 뷰에 속하지 않은 다른 요소의 하위 트리에서 요소를 탐색할 수 있습니다.The Normalize method can be used for navigating to an element in the subtree from another element that is not part of the view. 예를 들어, ContentViewWalker를 사용하여 하위 트리 뷰를 만들었다고 가정해 보겠습니다.For example, suppose you have created a view of a subtree by using ContentViewWalker. 그러면 스크롤 막대가 입력 포커스를 받았다는 알림이 애플리케이션에 전달됩니다.Your application then receives notification that a scroll bar has received the input focus. 스크롤 막대는 콘텐츠 요소가 아니기 때문에 하위 트리의 뷰에 나타나지 않습니다.Because a scroll bar is not a content element, it is not present in your view of the subtree. 하지만 스크롤 막대를 나타내는 AutomationElementNormalize 에 전달하고 콘텐츠 뷰에 있는 가장 가까운 상위 항목을 검색할 수 있습니다.However, you can pass the AutomationElement representing the scroll bar to Normalize and retrieve the nearest ancestor that is in the content view.

요소를 검색하는 기타 방법Other Ways to Retrieve an Element

검색 및 탐색 외에도 다음과 같은 방법으로 AutomationElement 를 검색할 수 있습니다.In addition to searches and navigation, you can retrieve an AutomationElement in the following ways.

이벤트에서From an Event

애플리케이션이 UI 자동화UI Automation 이벤트를 수신하면, 이벤트 처리기에 전달된 소스 개체는 AutomationElement입니다.When your application receives a UI 자동화UI Automation event, the source object passed to your event handler is an AutomationElement. 예를 들어, 포커스 변경 이벤트를 구독한 경우 AutomationFocusChangedEventHandler 에 전달된 소스는 포커스를 받은 요소입니다.For example, if you have subscribed to focus-changed events, the source passed to your AutomationFocusChangedEventHandler is the element that received the focus.

자세한 내용은 Subscribe to UI Automation Events을 참조하세요.For more information, see Subscribe to UI Automation Events.

지점에서From a Point

화면 좌표가 있는 경우(예: 커서 위치) 정적 AutomationElement 메서드를 사용하여 FromPoint 를 검색할 수 있습니다.If you have screen coordinates (for example, a cursor position), you can retrieve an AutomationElement by using the static FromPoint method.

창 핸들에서From a Window Handle

HWND에서 AutomationElement 를 검색하려면 정적 FromHandle 메서드를 사용합니다.To retrieve an AutomationElement from an HWND, use the static FromHandle method.

포커스가 있는 컨트롤에서From the Focused Control

정적 AutomationElement 속성에서 포커스가 있는 컨트롤을 나타내는 FocusedElement 를 검색할 수 있습니다.You can retrieve an AutomationElement that represents the focused control from the static FocusedElement property.

참고 항목See also