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.