Получение элементов автоматизации пользовательского интерфейса
Примечание |
---|
Эта документация предназначена для разработчиков на платформе .NET Framework, которым требуется использовать управляемые классы UI Automation, определенные в пространстве имен System.Windows.Automation.Последние сведения о UI Automation см. на веб-странице Windows Automation API: UI Automation. |
В этом разделе описываются различные способы получения объектов AutomationElement для элементов user interface (UI).
Внимание |
---|
Если клиентское приложение может осуществлять поиск элементов в своем собственном пользовательском интерфейсе, необходимо выполнять все вызовы UI Automation в отдельном потоке.Дополнительные сведения см. в разделе Проблемы потока модели автоматизация пользовательского интерфейса. |
В этом разделе содержатся следующие подразделы.
- Корневой элемент
- Условия
- Область поиска
- Поиск известного элемента
- Поиск элементов в поддереве
- Проход по поддереву
- Другие способы получения элемента
- Связанные разделы
Корневой элемент
Все поиски объектов AutomationElement должны иметь исходное место. Это может быть любой элемент, включая рабочий стол, окно приложения или элемент управления.
Корневой элемент рабочего стола, для которого все элементы являются потомками, получается из статического свойства AutomationElement.RootElement.
Внимание |
---|
В общем случае необходимо попытаться получить только прямых потомков RootElement.В процессе поиска потомков выполняется итерация сотен или даже тысяч элементов, что может привести к переполнению стека.При попытке получить определенный элемент на более низком уровне, необходимо запустить поиск из окна приложения или из контейнера на более низком уровне. |
Условия
В большинстве методов, которые можно использовать для извлечения элементов UI Automation, необходимо указать Condition, который представляет собой набор условий, определяющих, какие элементы необходимо получить.
Простейшим условием является TrueCondition, предопределенный объект, указывающий, что должны быть возвращены все элементы в области поиска. FalseCondition, обратный TrueCondition, менее полезен, так как он предотвращает поиск всех элементов.
Три других предопределенных условия могут использоваться отдельно или в сочетании с другими условиями: ContentViewCondition, ControlViewCondition и RawViewCondition Условие RawViewCondition, используемой само по себе, эквивалентно условию TrueCondition, так как оно не фильтрует элементы по их свойствам IsControlElement или IsContentElement.
Другие условия создаются из одного или нескольких объектов PropertyCondition, каждый из которых задает значение свойства. Например, PropertyCondition может указать, что элемент включен, или что он поддерживает определенный шаблон элемента управления.
Условия могут объединяться с помощью булевской логики, путем создания объектов с типами AndCondition, OrCondition и NotCondition.
Область поиска
Поиск, выполняемый с помощью FindFirst или FindAll должен иметь область, а также исходное место.
Область определяет пространство вокруг исходного места поиска. Оно может включать сам элемент, элементы его же уровня, его родительский элемент, его предки, его непосредственные дочерние элементы и его потомки.
Область поиска определяется битовой комбинацией значений из перечисления TreeScope.
Поиск известного элемента
Чтобы найти известный элемент, определяемый по его Name, AutomationId, или какому-либо другому свойству или сочетанию свойств, проще всего использовать метод FindFirst. Если искомый элемент является окном приложения, исходной точкой поиска может быть RootElement.
Этот способ поиска элементов UI Automation особенно полезен в скриптах автоматической проверки.
Поиск элементов в поддереве
Чтобы найти все элементы, удовлетворяющие определенным условиям, относящимся к известному элементу, можно использовать FindAll. Например, можно использовать этот метод для извлечения элементов списка или элементов меню из списка или меню, или для идентификации всех элементов управления в диалоговом окне.
Проход по поддереву
Если нет предыдущих сведений о приложениях, которые клиент может использовать, можно создать поддерево всех интересующих элементов с помощью класса TreeWalker. Приложение может сделать это в ответ на событие изменения фокуса; когда приложение или элемент управления получает фокус ввода, клиент автоматизации пользовательского интерфейса проверяет дочерние элементы и, возможно, всех потомков элемента, получившего фокус.
Другим способом, в котором может использоваться TreeWalker, является определение предков элемента. Например, при движении по дереву вверх вы можете определить родительское окно элемента управления.
Можно использовать TreeWalker либо путем создания объекта класса (определяя интересующие элементы, передавая Condition), или путем использования одного из следующих предопределенных объектов, которые определены в качестве полей в TreeWalker.
Поиск только тех элементов, свойство IsContentElement которых равно true. |
|
Поиск только тех элементов, свойство IsControlElement которых равно true. |
|
Поиск всех элементов. |
После получения TreeWalker, использовать его достаточно просто. Просто вызывайте методы Get для перехода по элементам поддерева.
Метод Normalize может использоваться для перемещения к элементу в поддереве из другого элемента, который не является частью представления. Например, предположим, что создано представление поддерева с помощью ContentViewWalker. Приложение затем получает уведомление, что полоса прокрутки получила фокус ввода. Поскольку полоса прокрутки не является элементом содержимого, оно отсутствует в представлении поддерева. Тем не менее, можно передать элемент AutomationElement, представляющий полосу прокрутки в Normalize и извлечь ближайший предок, который находится в представлении содержимого.
Другие способы получения элемента
В дополнение к поиску и переходам, можно получить AutomationElement следующими способами.
Из события
Когда приложение получает событие UI Automation, объектом источника, переданным обработчику событий, является AutomationElement. Например, при подписке на события изменения фокуса, источником, передаваемым в AutomationFocusChangedEventHandler, является элемент, который получил фокус.
Дополнительные сведения см. в разделе Подписка на события модели автоматизации пользовательского интерфейса.
Из точки
Если имеются координаты экрана (например, позиция курсора), можно получить AutomationElement с помощью статического метода FromPoint.
Из дескриптора окна
Чтобы получить AutomationElement из HWND, используйте статический метод FromHandle.
Из элемента управления, получившего фокус
Элемент AutomationElement, который представляет элемент управления, получивший фокус, можно получить из статического свойства FocusedElement.
См. также
Задачи
Нахождение Элемента Автоматизации Пользовательского Интерфейса в Зависимости от Состояния Свойства
Навигация между элементами автоматизированного пользовательского интерфейса с помощью TreeWalker
Основные понятия
Общие сведения о дереве модели автоматизации пользовательского интерфейса