UISpy и UIA проверяют отображение разных значений свойств в одной и той же программе

#c# #.net #ui-automation #microsoft-ui-automation #ui-spy

#c# #.net #пользовательский интерфейс-автоматизация #microsoft-ui-automation #пользовательский интерфейс-шпион

Вопрос:

У меня есть тестируемая программа, кнопка закрытия которой включена в один момент и отключена в другой. UISpy показывает ‘IsEnabled’ в обеих точках как ‘true’, UIAVerify показывает ‘IsEnabled’ в первой точке как ‘true’, а во второй как ‘false’

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

использование System.Windows.Автоматизация;

Древовидная структура: «Диалоговое окно», «Имяпрограммы», «строка заголовка», «Имяпрограммы», «кнопка», «Закрыть»

Кто-нибудь знает, что может быть причиной этого? Использует ли UIA Verify другую библиотеку, чем UISpy?

Комментарии:

1. Может ли UISpy кэшировать дерево? Это может быть выборка сведений об элементах один раз, при первом обнаружении, и просто повторное отображение той же информации при втором выборе того же элемента. Проверьте, есть ли кнопка «обновить» или аналогичная, которую вы можете использовать, чтобы заставить UISpy отображать текущие значения.

2. Нет, это не так, моя собственная автоматизация извлекает информацию по запросу в режиме реального времени, не полагаясь на информацию кэша — и она по-прежнему совпадает с тем, что показывает uispy. Кроме того, если uispy запускается после того, как программа находится в состоянии ‘IsEnabled’-false, uispy все равно сообщает, что это true.

3. У меня есть приложение C MFC. В нем есть элемент управления вкладками с некоторыми страницами вкладок. Я нахожусь на win2k3. UISpy показывает идентификатор автоматизации для этого элемента управления, а UIAVerify — нет. Я использую White framework, который также не распознает элемент управления tab, точно так же, как UIAVerify. Spy и Verify определенно используют разные библиотеки!. Xeno вы выяснили, какие библиотеки они используют для поиска элементов управления? заранее спасибо.

Ответ №1:

Проверка UIA 2.0 использует более новую встроенную библиотеку COM UIA, которая была выпущена в обновлении UIA 3.0 вместе с Windows 7 (также доступна в виде отдельного исправления KB971513 для Vista и XP SP3). С другой стороны, UISpy, я думаю, использует оригинальный управляемый API.

У меня периодически возникали проблемы с управляемой библиотекой с помощью методов .isEnabled() и .invoke() , которые я смог исправить, перейдя на библиотеку COM, которая в целом кажется более стабильной и быстрой, чем управляемая библиотека.

Я не могу вспомнить специфику процесса переноса, но в основном вам нужно создать библиотеку DLL взаимодействия, которая позволит вашему .СЕТЕВОЕ приложение для вызова собственных методов UIA. Затем вы можете при желании создать свою собственную библиотеку-оболочку или, возможно, использовать одну из упомянутых ниже.

Я бы рекомендовал обратиться к ним за помощью при переходе:

  • Автоматизация пользовательского интерфейса COM-to-.NET Адаптер — ранняя попытка создания оболочки для COM API. У меня возникли проблемы с простым использованием этого, но было полезно взглянуть на него изначально. Также найдите некоторые сообщения на форуме поддержки MSDN о COM API, сделанные разработчиком этой оболочки. К сожалению, я не могу ссылаться на них из-за моей низкой репутации StackOverflow (долгое время скрывался, впервые отвечал).

  • UIA проверяет исходный код — вы можете видеть, что в их исходном коде есть UIAComWrapper, который используется для доступа к интерфейсу COM. Вы также можете взглянуть в этом проекте на то, как они создают библиотеку DLL взаимодействия.