3.2 AutomationElement 메서드
AutomationElement 클래스에는 특정 조건에 맞는 자동화 요소를 탐색하거나 어떠한 패턴에 해당하는지 검색하는 등의 작업을 할 수 있게 다양한 메서드를 제공하고 있습니다.
메서드 명 |
형식 |
FindAll |
조건에 맞는 자동화 요소 개체를 탐색 |
FindFirst |
조건에 맞는 첫 번째 자식이나 하위 요소를 검색 |
FromHandle |
창 핸들에서 참조하는 자동화 요소 개체 검색(정적) |
FromLocalProvider |
공급자 개체에서 자동화 요소 개체 검색(정적) |
FromPoint |
데스크톱의 특정 지점에 있는 자동화 요소 개체 검색(정적) |
GetCachedPattern |
캐시에 지정된 패턴 검색 |
GetCachedPropertyValue |
캐시에서 특정 속성 값 검색 |
GetClickablePoint |
클릭할 수 있는 지점 검색 |
GetCurrentPattern |
패턴 검색 |
GetCurretnPropertyValue |
속성 값을 검색 |
GetRuntimeId |
식별자 검색 |
GetSupportedPatterns |
지원하는 컨트롤 패턴 검색 |
GetSupportedProperties |
지원하는 속성 식별자 검색 |
GetUpdatedCache |
캐시가 업데이트된 자동화 요소 검색 |
SetFocus |
포커스 설정 |
TryGetCachedPattern |
캐시에서 컨트롤 패턴 검색 |
TryGetClickablePoint |
클릭할 수 있는 위치 검색 |
TryGetCurrentPattern |
컨트롤 패턴 검색 |
[표 3.3] AutomationElement 메서드
FindFirst는 입력 인자로 전달한 조건에 만족하는 첫 번째 자식 요소 혹은 하위 요소를 반환하며 FindAll은 조건에 만족하는 모든 요소를 반환합니다.
public AutomationElement FindFirst(TreeScope scope, Condition condition);
public AutomationElementCollection FindFirst(TreeScope scope, Condition condition);
검색 조건으로 TreeScope는 요소의 범위를 지정하기 위한 열거형입니다. TreeScope는 논리 연산으로 범위를 세부적으로 지정할 수 있습니다.
멤버 이름 |
설명 |
Ancestors |
상위 항목을 포함 |
Children |
지계 자식 |
Descendants |
하위 항목 |
Element |
자신 |
Parent |
상위 요소(지원하지 않음) |
Subtree |
서브 트리 |
[표 3.4] TreeScope 열거형 멤버
검색 조건으로 Condition은 필터링에 사용할 조건입니다. 다음은 모든 자식 요소의 개수를 구하는 로직입니다.
Condition condition = new OrCondition(
Condition.TrueCondition,
Condition.FalseCondition);
AutomationElementCollection aec = null;
aec = ae.FindAll(TreeScope.Children, condition);
Console.WriteLine("자식수:{0}", aec.Count);
AutomationElement 클래스에는 요소를 탐색할 때 사용하는 세 가지 정적 메서드를 제공합니다. FromHandle은 Native 윈도우 핸들(Win32API의 HWND 값)로 FromLoaclProvider는 공급자 개체로 FromPoint는 특정 지점을 인자로 받아 해당하는 자동화 요소를 반환하는 메서드입니다.
public static AutomationElement FromHandle ( IntPtr hwnd);
public static AutomationElement FromLocalProvider (IRawElementProviderSimple ps);
public static AutomationElement FromPoint(Point pt);
그리고 AutomationElement 클래스의 정적 속성 RootElement을 제공하여 데스크톱의 자동화 요소 개체를 참조할 수 있습니다.
AutomationElement ae = AutomationElement.RootElement;
그리고 자동화 요소 개체의 Current 속성의 BoundingRectangle 속성으로 사각 영역을 얻어올 수 있습니다. 참고로 Rect 형식은 WindowsBase.dll에 정의하고 있으니 해당 어셈블리를 참조합니다.
Rect rect = ae.Current.BoundingRectangle;
이렇게 데스크톱 요소의 사각 영역을 얻어오면 화면의 너비와 높이를 확인할 수 있습니다.
AutomationElement ae = AutomationElement.RootElement;
Rect rect = ae.Current.BoundingRectangle;
그리고 얻어온 사각 영역의 정보와 FromPoint를 이용하여 현재 화면에 보이는 UI 요소를 탐색할 수 있습니다.
for (int x = 0; x < rect.Right; x=x+20)
{
for (int y = 0; y < rect.Bottom; y+=20)
{
sae = AutomationElement.FromPoint(new Point(x, y));
dictionary[sae.Current.NativeWindowHandle] = sae;
Console.Write(".");
}
}
using System; using System.Windows.Automation; using System.Windows; using System.Collections.Generic;
namespace _요소탐색_위치정보이용 { class Program { static void Main(string[] args) { AutomationElement ae = AutomationElement.RootElement; Rect rect = ae.Current.BoundingRectangle; AutomationElement sae; Dictionary<int, AutomationElement> dictionary = new Dictionary<int, AutomationElement>();
for (int x = 0; x < rect.Right; x=x+20) { for (int y = 0; y < rect.Bottom; y+=20) { sae = AutomationElement.FromPoint(new Point(x, y)); dictionary[sae.Current.NativeWindowHandle] = sae; Console.Write("."); } } Console.WriteLine("요소 개수:{0}", dictionary.Count);
foreach (AutomationElement dae in dictionary.Values) { ViewAEInfo(dae); } Console.ReadKey(); }
private static void ViewAEInfo(AutomationElement ae) { Console.WriteLine("요소명:{0}", ae.Current.Name); Console.WriteLine("사각영역:{0}", ae.Current.BoundingRectangle); Console.WriteLine("클래스 이름:{0}", ae.Current.ClassName); Console.WriteLine("컨트롤 유형:{0}", ae.Current.ControlType.ProgrammaticName); if (ae.Current.LabeledBy != null) { Console.WriteLine("LabledBy 이름:{0}", ae.Current.LabeledBy.Current.Name); } Console.WriteLine("윈도우 창 핸들:{0}", ae.Current.NativeWindowHandle); Console.WriteLine("프로세스 ID:{0}", ae.Current.ProcessId); } } } |
[소스 3.1] 화면 좌표로 UI 요소 탐색
'프로그래밍 기술 > 소프트웨어 접근성, UI 자동화' 카테고리의 다른 글
[S/W 접근성] TreeWalker 메서드 (0) | 2016.04.19 |
---|---|
[S/W 접근성] TreeWalker 개체 참조 (0) | 2016.04.19 |
[S/W 접근성] 자동화 트리 (데스크 톱의 모든 하위 요소 출력) (0) | 2016.04.19 |
[S/W 접근성] AutomationElement 메서드(속성 검색) (0) | 2016.04.19 |
[S/W 접근성] AutomationElement 메서드(자동화 요소 개체로 패턴 검색) (0) | 2016.04.19 |
[S/W 접근성] 자동화 요소 (0) | 2016.04.19 |
[S/W 접근성] 포커스 트래커 만들기 (0) | 2016.04.19 |
[S/W 접근성] UI 자동화 기술 개요 (0) | 2016.04.19 |
[S/W 접근성] 소프트웨어 접근성 지침 (0) | 2016.04.19 |
[S/W 접근성] 소프트 웨어 접근성 개요 (0) | 2016.04.19 |