MSAA не может найти элементы управления winforms

Я использую закодированный пользовательский интерфейс для автоматизации приложения. В процессе автоматизации внутри приложения происходит сложный процесс (загрузка PowerPoint внутри приложения). После этого процесса я не могу продолжить тест, потому что MSAA не может найти какие-либо элементы управления в приложении. Я использую Inspect.exe до и после сбоя автоматизации. Я прикрепил скриншот инструмента Inspect до и после сбоя. Есть ли какое-нибудь решение для преодоления этой проблемы? Я не могу продолжать тестирование автоматизации без перезапуска приложения всякий раз, когда сталкиваюсь с этой проблемой. Любая помощь будет принята с благодарностью! До сбоя закодированного пользовательского интерфейса (Inspect.exe)

После сбоя закодированного пользовательского интерфейса (Inspect.exe)


person S.Roshanth    schedule 19.03.2014    source источник
comment
Вы говорите, что внутри приложения происходит сложный процесс (загрузка PowerPoint внутри приложения), предполагая, что ваше приложение использует настраиваемые элементы управления. Закодированный пользовательский интерфейс не может работать с пользовательскими элементами управления, если они не были написаны для поддержки интерфейсов MSAA или UIA. При отсутствии такой поддержки лучшее, что может сделать закодированный пользовательский интерфейс, — это координаты внутри элемента управления. Добавление поддержки в пользовательские элементы управления является сложной задачей.   -  person AdrianHHH    schedule 19.03.2014
comment
Спасибо за ваш ответ, вы сразу после этого сложного процесса, если я попытаюсь записать какие-либо действия, все элементы управления автоматически объявляются как настраиваемые элементы управления. Как вы думаете, возможно ли продолжить автоматизацию с закодированным пользовательским интерфейсом в этой ситуации? Я не могу понять значение через координаты в элементе управления   -  person S.Roshanth    schedule 19.03.2014
comment
Закодированный пользовательский интерфейс генерирует такой код, как Mouse.Click(SomeUiControl, new Point(10, 10));, где 10,10 — это координата внутри элемента управления. Для простых элементов управления код можно заменить на Mouse.Click(SomeUiControl), но сгенерированный код включает координаты для лучшей поддержки некоторых более сложных элементов управления.   -  person AdrianHHH    schedule 19.03.2014
comment
Тест закодированного пользовательского интерфейса должен продолжаться, но на самом деле это зависит от того, как настраиваемый элемент управления обрабатывает движения мыши и щелчки.   -  person AdrianHHH    schedule 19.03.2014
comment
Спасибо за ваш ответ, я пробовал с Mouse.Click(SomeUiControl) и uiWindow.DrawHighlight(), но не повезло, исключение — UITestControlNotFoundException, а сообщение — «Невозможно найти элемент верхнего уровня элемента управления, что я могу сделать?». Но когда элементы управления идентифицируются как настраиваемые элементы управления, Inpect.exe с UIA может найти элементы управления. Есть ли способ изменить элементы управления в UIA вместо MSAA или ручного кода элементов управления пользовательского интерфейса в UIA?   -  person S.Roshanth    schedule 20.03.2014
comment
DrawHighlight должен быть успешным в родительском элементе управления пользовательского элемента управления. Я не уверен, будет ли это работать на самом пользовательском элементе управления. Такие программы, как Inspect.exe, используют механизмы отличия от закодированного пользовательского интерфейса. Многие люди (включая меня) задаются вопросом, почему они работают, но закодированный пользовательский интерфейс не может использовать те же механизмы. Согласно моему первому комментарию, вы можете добавить поддержку MSAA или UIA в пользовательский элемент управления, но сделать это сложно.   -  person AdrianHHH    schedule 20.03.2014
comment
хорошо спасибо. Если есть какой-либо способ вручную закодировать неисправные элементы управления в технологии UIA, потому что после сбоя структура автоматизации White смогла идентифицировать элементы управления и поддерживает продолжение тестирования. Поскольку White использует UIA, есть ли способ переключиться на UIA из MSAA в закодированном пользовательском интерфейсе? Потому что я предпочитаю закодированный интерфейс, а не белый. фреймворк.   -  person S.Roshanth    schedule 20.03.2014


Ответы (2)


Попробуйте изменить разрешение экрана и размер экрана в настройках Windows.

Была такая же проблема в CodedUI. Инструмент проверки не нашел элементы управления в режиме msaa. После изменения разрешения и размера экрана он смог найти элементы управления.

person Lalith    schedule 30.06.2021

Закодированный пользовательский интерфейс поддерживает WinForms и WinControls. Я предлагаю вам найти WinWindow, используя следующий код:

`WinWindow samplewindow = new WinWindow();
 samplewindow.SearchProperties[WinWindow.PropertyNames.Name] = "XXYYZZZ";
 samplewindow.SearchProperties[WinWindow.PropertyNames.ClassName] = "XXYYYZZZ";
 WinButton uIButton = new WinButton(samplewindow);
 uIButton.SearchProperties[WinButton.PropertyNames.Name] = "XXYYYZZZ";
 Mouse.Click(uIButton, MouseButtons.Left, System.Windows.Input.ModifierKeys.None, uIButton.GetClickablePoint());'
person Sathish    schedule 28.04.2015