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

Мое приложение WPF реализует фреймворк призмы. Есть несколько элементов управления меню, которые загружаются в контейнер при изменении страницы. Я пытаюсь использовать закодированный пользовательский интерфейс, чтобы добавить утверждения к этим кнопкам.

Когда CUIT используется на первом экране, кажется, что ничего не распознается. Но на втором экране их узнают. В коде для их загрузки нет никаких изменений, за исключением того, что элементы управления находятся на одном уровне на первом экране (это то, что показывает snoop).

Должен ли я по-прежнему иметь код одноранговых узлов автоматизации, который должен быть написан в конце исходного кода, чтобы отображать элементы управления, хотя они являются стандартными элементами управления WPF?

Что еще я могу попытаться добиться, чтобы их узнавали постоянно?

Inspect.exe, UIA Verify, Snoop отображают все элементы управления WPF независимо от того, на каком экране я нахожусь.


person kris123pra    schedule 01.04.2012    source источник
comment
Попробуйте добавить Thread.Sleep() перед загрузкой первого экрана   -  person KMoraz    schedule 02.04.2012
comment
Спасибо, KMoraz, но у меня нет доступа к коду разработчика. И если в тестовом коде должен был быть сон, не могли бы вы объяснить, как он работает.   -  person kris123pra    schedule 02.04.2012
comment
Это позволит дождаться загрузки всех элементов управления   -  person KMoraz    schedule 02.04.2012
comment
@KMoraz Thread.Sleep не рекомендуется. Если элементы управления не распознаются, потому что им нужно дождаться загрузки с помощью PlayBack.Settings.WaitForReadyLevel, настроенного на ожидание всех потоков, будет намного эффективнее / эффективнее, но я сомневаюсь, что это настоящая проблема здесь.   -  person stoj    schedule 02.04.2012
comment
@ kris123pra Вы не упомянули, пишете ли вы код вручную или используете функцию записи. Если вы записываете, распознаются ли элементы управления в редакторе UIMap?   -  person stoj    schedule 02.04.2012
comment
@stoj: Да, я использую функцию записи. Элементы управления не распознаются, когда я использую spy / assert. Я хотел знать, можем ли мы использовать класс AutomationPeer. Я читал об этом, но не понял, как это сделать со стороны клиента.   -  person kris123pra    schedule 03.04.2012
comment
AutomationPeer должен быть реализован в исходном коде тестируемого приложения.   -  person stoj    schedule 03.04.2012


Ответы (1)


Хорошо, думаю, я понимаю. Когда вы переходите на первую страницу и пытаетесь выделить или выбрать элемент с помощью CodedUI Test Builder или Spy ++, элементы управления не распознаются, но распознаются на другой странице.

Контейнер, в котором элементы управления находятся на первой странице, - это какой-то тип настраиваемого элемента управления или общий элемент управления WPF? Если это настраиваемый элемент управления, вам необходимо реализовать класс AutomationPeer для выполнения значимых действий с элементом управления. Если все, что вам нужно сделать, это нажать кнопку, вы можете вручную написать код, чтобы вручную щелкнуть внутри родительского контейнера.

person stoj    schedule 03.04.2012
comment
Спасибо. Элементы управления были стандартными кнопками WPF. Мы обнаружили, что есть еще один слой, который мешает закодированному пользовательскому интерфейсу распознавать элементы управления. На данный момент проблема решена, но мне было интересно, повторится ли подобное снова, было бы хорошо знать, как реализовать Peers. Кто-нибудь может подсказать хорошие сайты? - person kris123pra; 10.04.2012