Получение элементов автоматизации пользовательского интерфейса

Обновлен: Ноябрь 2007

В этом разделе описываются различные способы получения объектов AutomationElement для элементов пользовательский интерфейс.

ms752331.alert_caution(ru-ru,VS.90).gifВнимание!

Если клиентское приложение может осуществлять поиск элементов в своем собственном пользовательском интерфейсе, необходимо выполнять все вызовы Модель автоматизации пользовательского интерфейса в отдельном потоке. Дополнительные сведения см. в разделе Проблемы потока модели автоматизация пользовательского интерфейса.

В этом разделе содержатся следующие подразделы.

  • Корневой элемент
  • Условия
  • Область поиска
  • Поиск известного элемента
  • Поиск элементов в поддереве
  • Проход по поддереву
  • Другие способы получения элемента
  • Связанные разделы

Корневой элемент

Все поиски объектов AutomationElement должны иметь исходное место. Это может быть любой элемент, включая рабочий стол, окно приложения или элемент управления.

Корневой элемент рабочего стола, для которого все элементы являются потомками, получается из статического свойства AutomationElement.RootElement.

ms752331.alert_caution(ru-ru,VS.90).gifВнимание!

В общем случае необходимо попытаться получить только прямых потомков RootElement. В процессе поиска потомков выполняется итерация сотен или даже тысяч элементов, что может привести к переполнению стека. При попытке получить определенный элемент на более низком уровне, необходимо запустить поиск из окна приложения или из контейнера на более низком уровне.

Условия

В большинстве методов, которые можно использовать для извлечения элементов Модель автоматизации пользовательского интерфейса, необходимо указать Condition, который представляет собой набор условий, определяющих, какие элементы необходимо получить.

Простейшим условием является TrueCondition, предопределенный объект, указывающий, что должны быть возвращены все элементы в области поиска. FalseCondition, обратный TrueCondition, менее полезен, так как он предотвращает поиск всех элементов.

Три других предопределенных условия могут использоваться отдельно или в сочетании с другими условиями: ContentViewCondition, ControlViewCondition и RawViewCondition Условие RawViewCondition, используемой само по себе, эквивалентно условию TrueCondition, так как оно не фильтрует элементы по их свойствам IsControlElement или IsContentElement.

Другие условия создаются из одного или нескольких объектов PropertyCondition, каждый из которых задает значение свойства. Например, PropertyCondition может указать, что элемент включен, или что он поддерживает определенный шаблон элемента управления.

Условия могут объединяться с помощью булевской логики, путем создания объектов с типами AndCondition, OrCondition и NotCondition.

Область поиска

Поиск, выполняемый с помощью FindFirst или FindAll должен иметь область, а также исходное место.

Область определяет пространство вокруг исходного места поиска. Оно может включать сам элемент, элементы его же уровня, его родительский элемент, его предки, его непосредственные дочерние элементы и его потомки.

Область поиска определяется битовой комбинацией значений из перечисления TreeScope.

Поиск известного элемента

Чтобы найти известный элемент, определяемый по его Name, AutomationId, или какому-либо другому свойству или сочетанию свойств, проще всего использовать метод FindFirst. Если искомый элемент является окном приложения, исходной точкой поиска может быть RootElement.

Этот способ поиска элементов Модель автоматизации пользовательского интерфейса особенно полезен в сценариях автоматической проверки.

Поиск элементов в поддереве

Чтобы найти все элементы, удовлетворяющие определенным условиям, относящимся к известному элементу, можно использовать FindAll. Например, можно использовать этот метод для извлечения элементов списка или элементов меню из списка или меню, или для идентификации всех элементов управления в диалоговом окне.

Проход по поддереву

Если нет предыдущих сведений о приложениях, которые клиент может использовать, можно создать поддерево всех интересующих элементов с помощью класса TreeWalker. Приложение может сделать это в ответ на событие изменения фокуса; когда приложение или элемент управления получает фокус ввода, клиент автоматизации пользовательского интерфейса проверяет дочерние элементы и, возможно, всех потомков элемента, получившего фокус.

Другим способом, в котором может использоваться TreeWalker, является определение предков элемента. Например, при движении по дереву вверх вы можете определить родительское окно элемента управления.

Можно использовать TreeWalker либо путем создания объекта класса (определяя интересующие элементы, передавая Condition), или путем использования одного из следующих предопределенных объектов, которые определены в качестве полей в TreeWalker.

ContentViewWalker

Поиск только тех элементов, свойство IsContentElement которых равно true.

ControlViewWalker

Поиск только тех элементов, свойство IsControlElement которых равно true.

RawViewWalker

Поиск всех элементов.

После получения TreeWalker, использовать его достаточно просто. Просто вызывайте методы Get для перехода по элементам поддерева.

Метод Normalize может использоваться для перемещения к элементу в поддереве из другого элемента, который не является частью представления. Например, предположим, что создано представление поддерева с помощью ContentViewWalker. Приложение затем получает уведомление, что полоса прокрутки получила фокус ввода. Поскольку полоса прокрутки не является элементом содержимого, оно отсутствует в представлении поддерева. Тем не менее, можно передать элемент AutomationElement, представляющий полосу прокрутки в Normalize и извлечь ближайший предок, который находится в представлении содержимого.

Другие способы получения элемента

В дополнение к поиску и переходам, можно получить AutomationElement следующими способами.

Из события

Когда приложение получает событие Модель автоматизации пользовательского интерфейса, объектом источника, переданным обработчику событий, является AutomationElement. Например, при подписке на события изменения фокуса, источником, передаваемым в AutomationFocusChangedEventHandler, является элемент, который получил фокус.

Дополнительные сведения см. в разделе Подписка на события модели автоматизации пользовательского интерфейса.

Из точки

Если имеются координаты экрана (например, позиция курсора), можно получить AutomationElement с помощью статического метода FromPoint.

Из дескриптора окна

Чтобы получить AutomationElement из HWND, используйте статический метод FromHandle.

Из элемента управления, получившего фокус

Элемент AutomationElement, который представляет элемент управления, получивший фокус, можно получить из статического свойства FocusedElement.

См. также

Задачи

Нахождение Элемента Автоматизации Пользовательского Интерфейса в Зависимости от Состояния Свойства

Навигация между элементами автоматизированного пользовательского интерфейса с помощью TreeWalker

Основные понятия

Общие сведения о дереве модели автоматизации пользовательского интерфейса