Я пытаюсь автоматизировать определенный элемент управления (Rad GridView Telerik) с UIA Microsoft. Я создал класс-оболочку, который предоставляет несколько вспомогательных методов для моего теста - наиболее ярким примером является метод GetAllRows(), который возвращает коллекцию всех строк сетки.Автоматизация виртуализованного управления с помощью UIA
Моя проблема заключается в том, что этот конкретный элемент управления виртуализирован, а это означает, что только видимые строки отображаются и отображаются в пользовательском интерфейсе в любой момент времени. Чтобы получить все строки, я вынужден использовать ScrollPattern и многократно прокручивать вниз, пока не дойду до 100% прокрутки, каждый раз запрашивая все дочерние элементы строки. Помимо этого явного уродливого кода, я также сталкиваюсь с проблемой удаления строк, которые были собраны несколько раз, что сложно, потому что в этой конкретной сетке допускаются повторяющиеся значения.
Корпорация Майкрософт рекомендует использовать шаблон ItemContainer, который позволяет запрашивать все элементы автоматизации под определенным контролем при условии, независимо от того, виртуализованы они или нет. Затем вы можете использовать метод RealizeItemPattern's Realize(), чтобы принести AutomationElement в представление и визуализировать его.
Это могло бы сработать, к сожалению, Telerik не реализовал этот шаблон управления для их представления сетки, и даже если бы они это сделали, у меня возникли бы проблемы с его использованием, так как строки сетки не получат уникальный AutomationId, что затрудняет формулировку Объект состояния, который будет использовать шаблон ItemContainer.
Есть ли у кого-нибудь идеи, как это будет возможно более элегантно? У меня нет проблемы с внедрением метода «скроллер» для рендеринга строк, но я не хочу иметь дело с удалением дубликатов AutomationElements.
Было бы очень полезно, если бы вы могли опубликовать свой код. Это поможет мне и другим, столкнувшимся с подобной проблемой. – digitguy