2013-06-12 3 views
2

Я пытаюсь автоматизировать определенный элемент управления (Rad GridView Telerik) с UIA Microsoft. Я создал класс-оболочку, который предоставляет несколько вспомогательных методов для моего теста - наиболее ярким примером является метод GetAllRows(), который возвращает коллекцию всех строк сетки.Автоматизация виртуализованного управления с помощью UIA

Моя проблема заключается в том, что этот конкретный элемент управления виртуализирован, а это означает, что только видимые строки отображаются и отображаются в пользовательском интерфейсе в любой момент времени. Чтобы получить все строки, я вынужден использовать ScrollPattern и многократно прокручивать вниз, пока не дойду до 100% прокрутки, каждый раз запрашивая все дочерние элементы строки. Помимо этого явного уродливого кода, я также сталкиваюсь с проблемой удаления строк, которые были собраны несколько раз, что сложно, потому что в этой конкретной сетке допускаются повторяющиеся значения.

Корпорация Майкрософт рекомендует использовать шаблон ItemContainer, который позволяет запрашивать все элементы автоматизации под определенным контролем при условии, независимо от того, виртуализованы они или нет. Затем вы можете использовать метод RealizeItemPattern's Realize(), чтобы принести AutomationElement в представление и визуализировать его.

Это могло бы сработать, к сожалению, Telerik не реализовал этот шаблон управления для их представления сетки, и даже если бы они это сделали, у меня возникли бы проблемы с его использованием, так как строки сетки не получат уникальный AutomationId, что затрудняет формулировку Объект состояния, который будет использовать шаблон ItemContainer.

Есть ли у кого-нибудь идеи, как это будет возможно более элегантно? У меня нет проблемы с внедрением метода «скроллер» для рендеринга строк, но я не хочу иметь дело с удалением дубликатов AutomationElements.

ответ

0

Чтобы следить за моим собственным вопросом, я закончил тем, что просто использовал код, который прокручивается до тех пор, пока не получит все элементы. Я позабочусь о дублированных значениях, всегда сохраняя последний элемент перед прокруткой и тем самым узнавая свое фактическое положение. Это некрасиво, но это довольно общий и многоразовый.

+1

Было бы очень полезно, если бы вы могли опубликовать свой код. Это поможет мне и другим, столкнувшимся с подобной проблемой. – digitguy

0

Возможно, вы использовали ItemContainer без условий, реализуя элементы один за другим, а затем тестировали их в своем коде, как обычно. Это спасло бы вашу работу со свитком и до тех пор, пока элемент не будет реализован после прокрутки «по себе».

Но без Telerik реализовать образец в первую очередь - я боюсь, что работа со свитком - единственный вариант.

Смежные вопросы