MS UI Automation WinForms: не удается найти окно выбора поля сетки в дереве автоматизации UIA

У нас есть элемент управления Infragistics UltraGrid, и вы можете отобразить окно выбора поля для этой сетки.

Показано окно выбора поля

Однако средство выбора поля не отображается в дереве автоматизации UIA. Если я попытаюсь найти его программно, UIA не найдет его, то же самое, если я попытаюсь найти его вручную с помощью UIA Verify.

Дерево автоматизации не показывает средство выбора поля

Но если я использую режим наведения / фокусировки UIA Verify, чтобы найти средство выбора поля, то оно показывает его, а также показывает в той же форме, что и элемент управления сеткой.

введите здесь описание изображения

Как найти элемент управления с помощью кода? Почему он не отображается в дереве автоматизации?


person RickL    schedule 04.02.2016    source источник
comment
Есть ли у него поддержка AutomationID? Насколько глубоко он вложен? Имеет ли он то же имя элемента управления, идентификатор элемента управления или имя, что и другие элементы управления?   -  person AlexCharizamhard    schedule 04.02.2016
comment
Да, если я нахожу его в режиме наведения/фокусировки, он выглядит нормально. Он имеет ControlType.Window, AutomationId = ColumnChooserDialog, Name = Orders — Выбор поля. Но если я ищу эти свойства, он их не находит... я делаю FindAll родительской формы и просматриваю дочерние элементы, которые она не показывает.   -  person RickL    schedule 04.02.2016
comment
Это похоже на окно контейнера. Фактическое управление, вероятно, находится под этим окном. ParentForm --› окно контейнера --› элемент управления   -  person AlexCharizamhard    schedule 04.02.2016
comment
Я добавил несколько изображений... первое - это то, как оно обычно отображается в UIA Verify и в коде - средство выбора поля просто не отображается в дереве автоматизации. Второй показывает, что он появляется в дереве после того, как я нашел его с помощью режима наведения/фокусировки в UIA Verify.   -  person RickL    schedule 04.02.2016
comment
Имейте в виду, что дерево UIA — живое существо. Это, вероятно, означает, что вам нужно инициировать пользовательское (взаимо)действие (мышь, клавиатура, щелчок, наведение и т. д.) в родительской форме, чтобы можно было создать окно выбора поля (или родить его с помощью кода инфрагистики, который будет реагировать на это действие, если оно уже существует где-то еще). Трудно помочь больше без простого кода воспроизведения   -  person Simon Mourier    schedule 04.02.2016
comment
Я добавил изображение в начале, чтобы показать, что отображается окно выбора поля. Полагаю, мне было интересно, является ли это общей проблемой с UIA и есть ли решение? т. е. этапы воспроизведения заключаются в создании сетки Infragistics и отображении средства выбора поля, а затем его проверке с помощью UIA Verify.   -  person RickL    schedule 04.02.2016
comment
Если у вас есть VS Ultimate, я бы попробовал использовать шпиона построителя тестов CodedUI, чтобы найти элемент управления, а затем щелкнуть стрелку вверх, как только вы найдете элемент управления, чтобы прокрутить дерево.   -  person AlexCharizamhard    schedule 04.02.2016


Ответы (2)


Похоже, это ошибка в платформе .NET, связанная с формами, созданными из дочерних форм MDI. В качестве обходного пути я смог использовать функцию AutomationElement.FromPoint().

ссылка на форум Microsoft

Цитата из Гая Баркера (Microsoft):

«Я могу воспроизвести проблему, которую вы видите. Я установил основной контейнер mdi и создал дочернюю форму, MdiParent которой является основной формой. Затем я добавил исходную форму, принадлежащую дочерней форме mdi. Когда Я сделал это, я мог получить информацию о принадлежащей форме в Inspect, но форма не отображалась в представлении дерева UIA.

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

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

person RickL    schedule 09.02.2016

Это инфрагистично. Некоторые компоненты, такие как ultratree, ultragrid и т. д., расположены в дереве объектов в неправильном порядке.

Возможные решения:

  • Попробуйте найти элемент управления из корня окна приложения.
  • Имитация действий мыши и клавиатуры.
  • Получите управление как AutomationElement.FocusedElement, а затем просмотрите родительские элементы
person unickq    schedule 06.02.2016