메모
이 설명서는 System.Windows.Automation 네임스페이스에 정의된 관리되는 UI 자동화 클래스를 사용하려는 .NET Framework 개발자를 위한 것입니다. UI 자동화에 대한 최신 정보는 Windows Automation API: UI 자동화를 참조하세요.
이 항목에서는 UI(사용자 인터페이스) 요소에 대한 개체를 AutomationElement 가져오는 다양한 방법을 설명합니다.
주의
클라이언트 애플리케이션이 자체 사용자 인터페이스에서 요소를 찾으려고 할 수 있는 경우 별도의 스레드에서 모든 UI 자동화 호출을 수행해야 합니다. 자세한 내용은 UI 자동화 스레딩 문제를 참조하세요.
루트 요소
개체에 대한 AutomationElement 모든 검색에는 시작 위치가 있어야 합니다. 데스크톱, 애플리케이션 창 또는 컨트롤을 비롯한 모든 요소일 수 있습니다.
모든 요소가 내림차순인 데스크톱의 루트 요소는 정적 AutomationElement.RootElement 속성에서 가져옵니다.
주의
일반적으로는 RootElement 요소의 직접 자식만 가져오려고 합니다. 하위 항목에 대한 검색은 수백 또는 수천 개의 요소를 반복하여 스택 오버플로가 발생할 수 있습니다. 하위 수준에서 특정 요소를 가져오려는 경우 애플리케이션 창 또는 낮은 수준의 컨테이너에서 검색을 시작해야 합니다.
조건
UI 자동화 요소를 검색하는 데 사용할 수 있는 대부분의 기술의 경우 검색할 요소를 정의하는 조건 집합인 을 지정 Condition해야 합니다.
가장 간단한 조건은 TrueCondition검색 범위 내의 모든 요소가 반환되도록 지정하는 미리 정의된 개체입니다. FalseCondition의 반대 TrueCondition는 요소를 찾을 수 없으므로 덜 유용합니다.
미리 정의된 세 가지 조건은 단독으로 또는 다른 조건ContentViewConditionControlViewConditionRawViewCondition과 함께 사용할 수 있습니다. RawViewCondition 자체 사용은 요소들을 TrueCondition 및 IsControlElement 속성으로 필터링하지 않으므로 IsContentElement와 동일합니다.
다른 조건은 각각 속성 값을 지정하는 하나 이상의 PropertyCondition 개체에서 빌드됩니다. 예를 들어 PropertyCondition 요소가 사용되도록 지정하거나 특정 컨트롤 패턴을 지원하도록 지정할 수 있습니다.
부울 논리를 사용하여 AndCondition, OrCondition, 및 NotCondition 형식의 개체를 생성함으로써 조건을 결합할 수 있습니다.
검색 범위
FindFirst 또는 FindAll를 사용한 검색은 시작 위치뿐 아니라 범위도 있어야 합니다.
범위는 검색할 시작 위치 주변의 공간을 정의합니다. 여기에는 요소 자체, 형제 자매, 부모, 상위 항목, 직계 자식 및 하위 항목이 포함될 수 있습니다.
검색 범위는 열거형 값의 비트 조합으로 TreeScope 정의됩니다.
알려진 요소 찾기
알려진 요소를 찾고, 이 요소를 Name, AutomationId 또는 다른 속성이나 속성 조합으로 식별하려면, FindFirst 메서드를 사용하는 것이 가장 쉽습니다. 찾은 요소가 애플리케이션 창인 경우 검색의 시작점이 될 RootElement수 있습니다.
UI 자동화 요소를 찾는 이 방법은 자동화된 테스트 시나리오에서 가장 유용합니다.
하위 트리에서 요소 찾기
특정 조건을 충족하는 모든 요소를 찾고자 할 때, 알려진 요소와 관련된 경우에는 FindAll를 사용하세요. 예를 들어 이 메서드를 사용하여 목록이나 메뉴에서 목록 항목이나 메뉴 항목을 검색하거나 대화 상자의 모든 컨트롤을 식별할 수 있습니다.
하위 트리 탐색
클라이언트를 사용할 수 있는 애플리케이션에 대한 사전 지식이 없는 경우 클래스를 사용하여 관심 있는 모든 요소의 하위 트리를 TreeWalker 생성할 수 있습니다. 애플리케이션은 포커스가 변경된 이벤트에 대한 응답으로 이 작업을 수행할 수 있습니다. 즉, 애플리케이션 또는 컨트롤이 입력 포커스를 받으면 UI 자동화 클라이언트는 자식 및 포커스가 있는 요소의 모든 하위 항목을 검사합니다.
사용할 수 있는 TreeWalker 또 다른 방법은 요소의 상위 항목을 식별하는 것입니다. 예를 들어 트리를 위로 이동하면 컨트롤의 부모 창을 식별할 수 있습니다.
클래스의 개체를 생성하여(TreeWalker을 전달하여 관심 있는 요소를 정의할 수 있음) 사용할 수 있으며, 또는 Condition의 필드로 정의된 다음의 미리 정의된 개체 중 하나를 사용할 수 있습니다.
| 분야 | 설명 |
|---|---|
| ContentViewWalker | |
| ControlViewWalker | |
| RawViewWalker | 모든 요소를 찾습니다. |
가져온 TreeWalker후에는 간단하게 사용할 수 있습니다. 메서드를 Get 호출하여 하위 트리의 요소 간을 탐색하기만 하면됩니다.
이 메서드는 Normalize 뷰의 일부가 아닌 다른 요소에서 하위 트리의 요소로 이동하는 데 사용할 수 있습니다. 예를 들어, ContentViewWalker를 사용하여 하위 트리의 뷰를 생성한 경우를 가정해 보겠습니다. 그러면 애플리케이션에서 스크롤 막대가 입력 포커스를 받았다는 알림을 받습니다. 스크롤 막대는 콘텐츠 요소가 아니므로 하위 트리 보기에 없습니다. 스크롤 막대를 나타내는 AutomationElement를 Normalize에 전달하여 콘텐츠 보기에서 가장 가까운 상위 항목을 검색할 수 있습니다.
요소를 검색하는 다른 방법
탐색 및 내비게이션 외에도 다음과 같은 방법으로 AutomationElement을(를) 가져올 수 있습니다.
이벤트에서
애플리케이션이 UI 자동화 이벤트를 수신하면 이벤트 처리기에 전달된 원본 개체가 됩니다 AutomationElement. 예를 들어, 포커스 변경 이벤트를 구독한 경우, AutomationFocusChangedEventHandler에 전달된 원본은 포커스를 받은 요소입니다.
자세한 내용은 UI 자동화 이벤트 구독을 참조하세요.
한 지점에서부터
화면 좌표(예: 커서 위치)가 있는 경우 정적 AutomationElement 메서드를 사용하여 FromPoint을(를) 얻을 수 있습니다.
창 핸들에서
HWND로부터 AutomationElement를 가져오려면 정적 FromHandle 메서드를 사용합니다.
포커스된 컨트롤로부터
정적 AutomationElement 속성에서 포커스가 있는 컨트롤을 나타내는 객체를 검색할 수 있습니다.