Как получить доступ к внутренним элементам пользовательского элемента управления WPF, который не реализует класс AutomationPeer? - PullRequest
1 голос
/ 09 февраля 2011

Недавно я узнал из этой статьи -

http://blogs.msdn.com/b/patrickdanino/archive/2009/11/11/custom-controls-and-ui-automation.aspx

- что элементы управления в WPF сами отвечают за предоставление своих элементов UIA, а также за все новые функции пользовательского элемента управления.недоступны для МАУ, пока они не будут представлены через реализацию соответствующего класса AutomationPeer.На моей работе мне поручено автоматизировать тестирование пользовательского интерфейса приложения WPF, в котором используется большое количество панелей инструментов.Проблема заключается в том, что через библиотеку автоматизации пользовательского интерфейса Microsoft я могу получить доступ к панелям инструментов (очевидно, которые разработаны как пользовательский элемент управления) как элементы AutomationElements, но не могу получить доступ к кнопкам внутри них - коллекция дочерних элементов / потомков всегда возвращает 0. При использовании теста закодированного пользовательского интерфейсатесты всегда терпят неудачу и показывают следующее сообщение об ошибке:

Метод теста CAM2QDummyTest.CodedUITest2.CodedUITestMethod1 выбросил исключение:

Microsoft.VisualStudio.TestTools.UITest.Extension.FailedToPlockedCore:контроль блокирует контроль.Пожалуйста, сделайте заблокированный элемент управления видимым и повторите действие.Дополнительные сведения:

TechnologyName: 'MSAA'

Имя: 'Standard'

ControlType: 'ToolBar'

---> System.Runtime.InteropServices.COMException: исключение из HRESULT: 0xF004F003

Очевидно, они не реализовали соответствующие классы AutomationPeer.Теперь у меня есть только приложение, а не исходный код.Поэтому я не могу решить проблему так, как описано в статье, которую я упоминал выше.Может кто-нибудь помочь с любой подсказкой, как я могу получить доступ к внутренним кнопкам панели инструментов?Любое предложение будет с благодарностью.

1 Ответ

3 голосов
/ 09 февраля 2011

Вы можете посмотреть, какие шаблоны и свойства поддерживаются с помощью AutomationElement.GetSupportedProperties() и AutomationElement.GetSupportedPatterns(), чтобы увидеть, есть ли другой шаблон, который вы можете использовать.Может быть, что есть элементы списка и т. Д. Через SelectionPattern или аналогичные, которые дадут вам доступ к кнопкам.

В противном случае, свяжитесь с поставщиками и попросите их добавить соответствующих пиров.

Вы всегда можете получить координаты (возможно, через BoundingRectangleProperty), а затем использовать функции Win32 для имитации щелчка мыши в соответствующем месте.Насти. Эта тема может помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...