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

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

IUIAutomationElement используется в примере приложения модель автоматизации пользовательского интерфейса содержимого документа.

root, элемент

Хотя элементы можно получить непосредственно с помощью методов, таких как IUIAutomation::GetFocusedElement, для некоторых клиентских приложений требуется представление иерархической структуры элементов, известное как дерево модель автоматизации пользовательского интерфейса. Корневой элемент этой иерархии является рабочим столом. Этот элемент можно получить с помощью метода IUIAutomation::GetRootElement или метода IUIAutomation::GetRootElementBuildCache. Оба этих метода извлекают указатель интерфейса IUIAutomationElement . Вы можете искать потомки с помощью методов, таких как IUIAutomationElement::FindFirst и FindAll.

Примечание.

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

 

Условия

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

Самым простым условием является истинное условие, которое является предопределенным объектом, который указывает, что возвращаются все элементы в область поиска. Ложное условие является обратным истинным условием и менее полезным, так как это позволит предотвратить поиск элементов. Вы можете получить интерфейс к истинному условию с помощью IUIAutomation::CreateTrueCondition.

Три других предопределенных условия, доступные в качестве свойств объекта IUIAutomation, можно использовать отдельно или в сочетании с другими условиями: IUIAutomation::ContentViewCondition, ControlViewCondition и RawViewCondition. RawViewCondition, используемый самим собой, эквивалентен истинному условию, так как он не фильтрует элементы по свойствам IUIAutomationElement::CurrentIsControlElement или CurrentIsContentElement.

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

Условия, использующие логическую логику, можно объединить путем вызова IUIAutomation::CreateAndCondition, CreateOrCondition, CreateNotCondition и связанных методов.

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

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

Примечание.

Любые комментарии об этих двух методах также применяются к IUIAutomationElement::FindFirstBuildCache и FindAllBuildCache.

 

Область определяет пространство вокруг начального места поиска. Это может включать сам элемент, его братья и сестры, его родитель, его непосредственные дочерние элементы и его потомки. Помните, что методы Find не поддерживают поиск по дереву Microsoft модель автоматизации пользовательского интерфейса; то есть поиск элементов предка не поддерживается.

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

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

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

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

Пример кода, показывающий, как найти известный элемент, см. в разделе "Поиск элемента по имени".

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

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

Пример кода, демонстрирующий поиск элементов в поддереве, см. в разделе "Поиск связанных элементов".

Обход поддерева

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

Помните, что ходьба по дереву модель автоматизации пользовательского интерфейса является ресурсоемкой. Ходить по дереву только в том случае, если невозможно использовать методы IUIAutomationElement::FindFirst, FindAll или BuildUpdatedCache.

Вы можете определить собственный обходчик дерева, передав настраиваемое условие в IUIAutomation::CreateTreeWalker, или использовать один из следующих предопределенных объектов, которые определяются как свойства базовой IUIAutomation.

Объект Цель
ContentViewWalker Находит только элементы, свойство IUIAutomationElement::CurrentIsContentElement имеет значение TRUE.
ControlViewWalker Находит только элементы, свойство IUIAutomationElement::CurrentIsControlElement имеет значение TRUE.
RawViewWalker Поиск всех элементов.

 

После получения IUIAutomationTreeWalker вызовите методы IUIAutomationTreeWalker::GetXxx, чтобы перемещать элементы поддерев, передавая элемент, с которого начинается переход.

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

Примеры кода, показывающие, как использовать интерфейс IUIAutomationTreeWalker, см. в разделе "Пошаговое модель автоматизации пользовательского интерфейса дерево".

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

Помимо поиска и навигации, можно получить IUIAutomationElement следующими способами.

Из события

Когда приложение получает событие модель автоматизации пользовательского интерфейса, исходный объект, переданный обработчику событий, представлен IUIAutomationElement. Например, если вы подписаны на события, измененные фокусом, источник, переданный в IUIAutomationFocusChangedEventHandler , является элементом, который получил фокус. Дополнительные сведения см. в разделе "Подписка на события модель автоматизации пользовательского интерфейса".

Из точки

Чтобы получить IUIAutomationElement из координат экрана, например положение курсора, используйте метод IUIAutomation::ElementFromPoint.

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

Чтобы получить IUIAutomationElement из HWND, используйте метод IUIAutomation::ElementFromHandle.

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

Чтобы получить IUIAutomationElement, представляющий фокусный элемент управления, используйте метод IUIAutomation::GetFocusedElement.

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

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