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

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

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

использование System.Windows.Automation;

Древовидная структура: "Диалог", "ProgramName", "строка заголовка", "ProgramName", "кнопка", "Закрыть".

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

1 ответ

Решение

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

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

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

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

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

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

Другие вопросы по тегам