Как переключить поставщика тестов с MSAA на UIA в пользовательском элементе управления для VS Coded UI Test Builder

Я внедряю провайдеров автоматизации для некоторых сторонних элементов управления, поэтому я могу протестировать пользовательский интерфейс моего приложения с помощью VS-кодированных тестов пользовательского интерфейса. Я использую подход автоматизации пользовательского интерфейса для этого. В стандартных инструментах проверки они выглядели нормально, но когда я использовал построитель тестов пользовательского интерфейса с кодированием VS, все мои элементы управления рассматриваются как MSAA в названии технологии (вместо UIA), поэтому большинство моих свойств пропущено. Что мне делать, чтобы VS Coded UI рассматривал это как UIA?
Вот мой код для возврата провайдера автоматизации:

LRESULT CALLBACK ControlWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_GETOBJECT:
{
// If the lParam matches the RootObjectId, send back the RawElementProvider
if (static_cast<long>(lParam) == static_cast<long>(UiaRootObjectId))
{
CustomButton* pControl = reinterpret_cast<CustomButton*>(GetWindowLongPtr(hwnd, GWLP_USERDATA));
IRawElementProviderSimple* pRootProvider = pControl->GetUIAutomationProvider();
return UiaReturnRawElementProvider(hwnd, wParam, lParam, pRootProvider);
}

return 0;
}
...
}

Этот код вызывается, когда я использовал сложный инструмент автоматизации, такой как Ranorex или просто Inspect.exe в режиме UIA. Но с VS не было никакого запроса UiaRootObjectId.
Вместо этого это называется lParam == OBJID_CLIENT пары. Поэтому он возвращает поставщика MSAA по умолчанию.

Снимок карты управления пользовательским интерфейсом

3

Решение

В случае, если кто-то застрял с той же проблемой, вот решение, которое я нашел. Вы должны создать свой собственный серверный поставщик, который будет использоваться для имени класса вашего элемента управления (это должен быть VS plugin .dll или что-то вроде этого).

Ваш пользовательский провайдер .dll должен быть помещен в каталог Visual Studio, после чего все ваши элементы управления в плагине VS cded ui будут иметь название технологии, поля и роли, которые вы описали сами. Пример для нестандартного провайдера можно найти на MSDN и других ресурсах.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]