다음을 통해 공유


UI 자동화 요소 가져오기

참고참고

이 문서는 System.Windows.Automation 네임스페이스에 정의된 관리되는 UI Automation 클래스를 사용하려는 .NET Framework 개발자를 위해 작성되었습니다.UI Automation에 대한 최신 정보는 Windows Automation API: UI Automation을 참조하십시오.

이 항목에서는 user interface (UI) 요소에 대한 AutomationElement 개체를 가져오는 여러 가지 방법을 설명합니다.

주의 정보주의

클라이언트 응용 프로그램이 자체의 고유한 사용자 인터페이스에서 요소를 찾으려고 하는 경우 모든 UI Automation 호출을 별도의 스레드에서 수행해야 합니다.자세한 내용은 UI 자동화 스레딩 문제를 참조하십시오.

이 항목에는 다음 단원이 포함되어 있습니다.

  • 루트 요소
  • 조건
  • 검색 범위
  • 알고 있는 요소 찾기
  • 하위 트리에서 요소 찾기
  • 하위 트리 검색
  • 요소를 검색하는 다른 방법
  • 관련 항목

루트 요소

AutomationElement 개체에 대한 모든 검색에는 시작 지점이 있어야 합니다. 데스크톱, 응용 프로그램 창, 컨트롤 등 모든 요소는 시작 지점이 될 수 있습니다.

모든 요소가 하위 요소로 속한 데스크톱의 루트 요소는 정적 AutomationElement.RootElement 속성을 통해 가져옵니다.

주의 정보주의

일반적으로 RootElement의 바로 아래 자식 요소만 가져와야 합니다.모든 하위 항목을 검색하면 수백 또는 수천 개의 요소에서 검색 작업이 반복되어 스택 오버플로가 발생할 수 있습니다.하위 수준에 있는 특정 요소를 찾으려는 경우 하위 수준에 있는 컨테이너나 응용 프로그램 창에서 검색을 시작해야 합니다.

조건

UI Automation 요소 검색에 사용할 수 있는 대부분의 방법에서 검색하려는 요소를 정의하는 조건의 집합인 Condition을 지정해야 합니다.

가장 간단한 조건은 검색 범위 내의 모든 요소를 반환하도록 지정하는 미리 정의된 개체인 TrueCondition입니다. TrueCondition의 반대인 FalseCondition은 검색되지 않는 요소가 있을 수 있으므로 그다지 유용하지 않습니다.

세 개의 다른 미리 정의된 조건인 ContentViewCondition, ControlViewConditionRawViewCondition은 단독으로 사용하거나 다른 조건과 조합하여 사용할 수 있습니다. RawViewCondition은 단독으로 사용할 경우 요소를 IsControlElement 또는 IsContentElement 속성으로 필터링하지 않으므로 TrueCondition과 동일합니다.

다른 조건은 각각 속성 값을 지정하는 하나 이상의 PropertyCondition 개체로 만들어집니다. 예를 들어 PropertyCondition은 요소가 활성화되었음을 지정하거나 특정 컨트롤 패턴을 지원함을 지정할 수 있습니다.

AndCondition, OrConditionNotCondition 형식의 개체를 생성하면 부울 논리를 사용하여 여러 조건을 조합할 수 있습니다.

검색 범위

FindFirst 또는 FindAll을 사용하여 수행하는 검색에는 시작 지점과 범위가 있어야 합니다.

범위는 검색할 시작 지점 주위의 영역을 정의합니다. 여기에는 요소 자체와 형제 요소, 부모 요소, 상위 요소, 바로 아래 자식 요소 및 하위 요소가 포함될 수 있습니다.

검색 범위는 TreeScope 열거형 값의 비트 조합으로 정의됩니다.

알고 있는 요소 찾기

Name, AutomationId 또는 다른 속성이나 속성 조합으로 식별되는 알고 있는 요소를 찾을 때는 FindFirst 메서드를 사용하는 방법이 가장 쉽습니다. 찾는 요소가 응용 프로그램 창인 경우에는 RootElement가 검색 시작 지점일 수 있습니다.

이러한 UI Automation 요소 검색 방법은 자동화된 테스트 시나리오에서 가장 유용합니다.

하위 트리에서 요소 찾기

알고 있는 요소와 관련된 특정 조건에 맞는 모든 요소를 찾으려면 FindAll을 사용하면 됩니다. 예를 들어 이 메서드를 사용하여 목록이나 메뉴에서 목록 항목이나 메뉴 항목을 검색하거나 대화 상자의 모든 컨트롤을 확인할 수 있습니다.

하위 트리 검색

클라이언트에 사용된 응용 프로그램에 대한 사전 지식이 없는 경우 TreeWalker 클래스를 사용하여 관심 있는 모든 요소의 하위 트리를 생성할 수 있습니다. 응용 프로그램은 포커스 변경 이벤트에 대한 응답으로 이 작업을 수행할 수 있습니다. 즉, 응용 프로그램 또는 컨트롤이 입력 포커스를 받으면 UI 자동화 클라이언트에서 포커스가 있는 요소의 자식 및 모든 하위 요소를 검사합니다.

TreeWalker는 요소의 상위 요소를 확인하는 데도 사용할 수 있습니다. 예를 들어 상위 트리로 이동하여 컨트롤의 부모 창을 확인할 수 있습니다.

TreeWalkerTreeWalker의 필드로 정의된 다음과 같은 미리 정의된 개체 중 하나를 사용하거나 Condition을 전달하여 관심 있는 요소를 정의하는 방식으로 클래스의 개체를 만드는 방법을 통해 사용할 수 있습니다.

ContentViewWalker

IsContentElement 속성이 true인 요소만 찾습니다.

ControlViewWalker

IsControlElement 속성이 true인 요소만 찾습니다.

RawViewWalker

모든 요소를 찾습니다.

TreeWalker를 가져왔으면 이를 사용하는 방법은 쉽습니다. Get 메서드를 호출하여 하위 트리의 요소를 탐색하기만 하면 됩니다.

Normalize 메서드를 사용하면 뷰에 속하지 않은 다른 요소에서 하위 트리에 있는 요소로 이동할 수 있습니다. 예를 들어 ContentViewWalker를 사용하여 하위 트리의 뷰를 만들었다고 가정합니다. 그런 다음 응용 프로그램에서 입력 포커스가 스크롤 막대로 이동했다는 알림을 수신합니다. 스크롤 막대는 콘텐츠 요소가 아니기 때문에 하위 트리의 뷰에 존재하지 않습니다. 하지만 스크롤 막대를 나타내는 AutomationElementNormalize로 전달하여 콘텐츠 뷰에 있는 가장 가까운 상위 항목을 검색할 수 있습니다.

요소를 검색하는 다른 방법

검색과 탐색 이외에도 다음 방법으로 AutomationElement를 검색할 수 있습니다.

이벤트 사용

응용 프로그램이 UI Automation 이벤트를 받을 때 이벤트 처리기로 전달되는 소스 개체가 AutomationElement입니다. 예를 들어 포커스 변경 이벤트를 구독하는 경우 AutomationFocusChangedEventHandler로 전달되는 소스가 포커스를 받는 요소입니다.

자세한 내용은 UI 자동화 이벤트 구독을 참조하십시오.

특정 지점 사용

커서 위치와 같은 화면 좌표가 있는 경우에는 정적 FromPoint 메서드를 사용하여 AutomationElement를 검색할 수 있습니다.

창 핸들 사용

HWND에서 AutomationElement를 검색하려면 정적 FromHandle 메서드를 사용합니다.

포커스가 있는 컨트롤 사용

정적 FocusedElement 속성을 통해 포커스가 있는 컨트롤을 나타내는 AutomationElement를 검색할 수 있습니다.

참고 항목

작업

속성 조건을 기반으로 UI 자동화 요소 찾기

TreeWalker를 사용하여 UI 자동화 요소 간 탐색

개념

UI 자동화 트리 개요