UI 자동화 요소 가져오기

이 항목에서는 UI 요소에 대한 IUIAutomationElement 인터페이스를 가져오는 다양한 방법을 설명합니다.

IUIAutomationElement는 UI 자동화 문서 콘텐츠 클라이언트 샘플 앱에서 사용됩니다.

루트 요소

IUIAutomation::GetFocusedElement와 같은 메서드를 사용하여 요소를 직접 검색할 수 있지만 일부 클라이언트 애플리케이션에는 UI 자동화 트리라고 하는 요소의 계층 구조 보기가 필요합니다. 이 계층의 루트 요소는 바탕 화면입니다. IUIAutomation::GetRootElement 메서드 또는 IUIAutomation::GetRootElementBuildCache 메서드를 사용하여 이 요소를 가져올 수 있습니다. 이러한 두 메서드는 모두 IUIAutomationElement 인터페이스 포인터를 검색합니다. IUIAutomationElement::FindFirst 및 FindAll같은 메서드를 사용하여 하위 요소를 검색할 수 있습니다.

참고 항목

일반적으로 루트 요소의 직접 자식만 가져오려고 합니다. 하위 항목에 대한 검색은 수백 또는 수천 개의 요소를 반복할 수 있습니다. 낮은 수준의 특정 요소를 가져오려고 시도하는 경우, 낮은 수준의 컨테이너 또는 애플리케이션 창에서 검색을 시작해야 합니다.

 

조건

UI 자동화 요소를 검색하는 데 사용하는 대부분의 기술에서는 조건을 지정해야 합니다. 조건은 검색하려는 요소를 정의하는 조건 집합입니다. 조건은 IUIAutomationCondition 인터페이스로 표시됩니다.

가장 간단한 조건은 검색 범위의 모든 요소가 반환되도록 지정하는 미리 정의된 개체인 true 조건입니다. false 조건은 실제 조건의 역이고 요소를 찾을 수 없으므로 유용하지 않습니다. IUIAutomation::CreateTrueCondition을 사용하여 실제 조건에 대한 인터페이스를 가져올 수 있습니다.

IUIAutomation 개체에서 속성으로 사용할 수 있는 세 가지 다른 미리 정의된 조건은 단독으로 또는 다른 조건인 IUIAutomation::ContentViewCondition, ControlViewCondition 및 RawViewCondition함께 사용할 수 있습니다. 그 자체로 사용되는 RawViewCondition은 IUIAutomationElement::CurrentIsControlElement 또는 CurrentIsContentElement 속성으로 요소를 필터링하지 않으므로 실제 조건과 동일합니다.

다른 조건은 각각 속성 값을 지정하는 조건 개체에서 빌드됩니다. 예를 들어 속성 조건은 요소가 사용되도록 지정하거나 특정 컨트롤 패턴을 지원하도록 지정할 수 있습니다.

부울 논리를 사용하는 조건은 IUIAutomation::CreateAndCondition, CreateOrCondition, CreateNotCondition 및 관련 메서드를 호출하여 결합할 수 있습니다.

검색 범위

IUIAutomationElement::FindFirst 또는 FindAll을 사용하여 수행되는 검색에는 범위와 시작 위치가 있어야 합니다.

참고 항목

이 두 메서드에 대한 설명은 IUIAutomationElement::FindFirstBuildCache FindAllBuildCache에도 적용됩니다.

 

범위는 검색할 시작 위치 주변의 공간을 정의합니다. 여기에는 요소 자체, 형제 자매, 부모, 직계 자식 및 하위 항목이 포함될 수 있습니다. Find 메서드는 Microsoft UI 자동화 트리 검색을 지원하지 않습니다. 즉, 상위 요소 검색은 지원되지 않습니다.

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

알려진 요소 찾기

이름, 자동화 ID 또는 다른 속성 또는 속성 조합으로 식별되는 알려진 요소를 찾으려면 IUIAutomationElement::FindFirst 메서드를 사용하는 것이 가장 쉽습니다. 검색된 요소가 애플리케이션 창인 경우 검색의 시작점이 루트 요소가 될 수 있습니다.

이렇게 UI 자동화 요소를 찾는 것은 자동화된 테스트 시나리오에서 가장 유용한 방법입니다.

알려진 요소를 찾는 방법을 보여 주는 코드 예제는 이름으로 요소 찾기를 참조 하세요.

하위 트리에서 요소 찾기

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

하위 트리에서 요소를 찾는 방법을 보여 주는 코드 예제는 관련 요소 찾기를 참조 하세요.

하위 트리 탐색

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

UI 자동화 트리를 걷는 것은 리소스를 많이 사용합니다. IUIAutomationElement::FindFirst, FindAll 또는 BuildUpdatedCache 메서드를 사용할 수 없는 경우에만 트리를 탐색합니다.

IUIAutomation::CreateTreeWalker에 사용자 지정 조건을 전달하여 사용자 고유의 트리 워커를 정의하거나 기본 IUIAutomation의 속성으로 정의된 다음 미리 정의된 개체 중 하나를 사용할 수 있습니다.

Object 목적
ContentViewWalker IUIAutomationElement::CurrentIsContentElement 속성이 TRUE인 요소만 찾습니다.
ControlViewWalker IUIAutomationElement::CurrentIsControlElement 속성이 TRUE요소만 찾습니다.
RawViewWalker 모든 요소를 찾습니다.

 

IUIAutomationTreeWalker가져온 후 IUIAutomationTreeWalker::GetXxx 메서드를 호출하여 하위 트리의 요소를 탐색하고 걷기 시작할 요소를 전달합니다.

IUIAutomationTreeWalker::Normalize 메서드는 뷰의 일부가 아닌 다른 요소에서 하위 트리의 요소로 이동하는 데 사용할 수 있습니다. 예를 들어 IUIAutomation::ContentViewWalker를 사용하여 하위 트리의 보기를 만든다고 가정합니다. 애플리케이션은 스크롤 막대가 입력 포커스를 받았다는 알림을 받습니다. 스크롤 막대는 콘텐츠 요소가 아니기 때문에 하위 트리의 뷰에 나타나지 않습니다. 그러나 스크롤 막대를 나타내는 IUIAutomationElement를 IUIAutomationTreeWalker::Normalize에 전달하고 콘텐츠 보기에 있는 가장 가까운 상위 항목을 검색할 수 있습니다.

IUIAutomationTreeWalker 인터페이스를 사용하는 방법을 보여 주는 코드 예제는 UI 자동화 트리를 걷는 방법을 참조하세요.

요소를 검색하는 기타 방법

검색 및 탐색 외에도 다음과 같은 방법으로 IUIAutomationElement를 검색할 수 있습니다.

이벤트에서

애플리케이션이 UI 자동화 이벤트를 받으면 이벤트 처리기에 전달된 원본 개체가 IUIAutomationElement표시됩니다. 예를 들어 포커스 변경 이벤트를 구독하는 경우 IUIAutomationFocusChangedEventHandler전달된 원본은 포커스를 받은 요소입니다. 자세한 내용은 UI 자동화 이벤트 구독을 참조하세요.

지점에서

화면 좌표(예: 커서 위치)에서 IUIAutomationElement를 검색하려면 IUIAutomation::ElementFromPoint 메서드를 사용합니다.

창 핸들에서

HWND에서 IUIAutomationElement검색하려면 IUIAutomation::ElementFromHandle 메서드를 사용합니다.

포커스가 있는 컨트롤에서

포커스가 있는 컨트롤을 나타내는 IUIAutomationElement를 검색하려면 IUIAutomation::GetFocusedElement 메서드를 사용합니다.

UI 자동화 트리 개요

문서 콘텐츠 클라이언트 샘플 앱 UI 자동화