Автоматизация WPF – поиск и структура WPF элементов

Автоматизация WPF – поиск и структура WPF элементов

В предыдущей статье мы рассмотрели структуру проекта. Проект можно скачать по ссылке GitHub.

Создание класса главного окна (MainWindow Page Object)

Класс MainWindow.cs представляет главное окно нашего приложения WPF (имейте в виду, что подаю урезанный код. Полный код можно скачать с репозитория по ссылке выше).

MainWindow согласно паттерну проектирования Page Object. Обьекты (элементы) являются приватными (private) свойствами. Действия над ними – публичные (public) методы, которые используются и вызываються в блоках кода тестов.

Как говорилось ранее – основная идея этого паттерна,- предотвращение дублирования кода для более гибкой поддержкт фреймворка автоматизации.

Класс MainWindow расширяет XamlElementContainer, который реализован фреймворком Telerik. Для поиска элементов WPF приложения используется  следующий метод типа TControl, который реализует класс XamlElementContainer:

Альтернативный вариант реализации MainWindow

Вместо наследования от класса XamlElementContainer можно просто передать обьект VisualFind конструктору MainWindow и искать элементы следующим образом.

Как находить элементы написано в этой статье article.

XamlPath

Как вы могли заметить я использую метод XamlPath find для поиска элементов и простоты в обслуживании. Синтаксис XamlPath довольно похож на синтаксис XPath. Главное отличие индексы элементов основаны на нулевых значениях (Button[0] – определяет первый обьект кнопки). Самая сложная часть в автоматизации – поиск XamlPath. Я нашел следующий инструмент для его определения WPF Inspector. Он предоставляет всю необходимую информацию о структуре приложения WPF.

WPF Inspector

1xmlpath

Это скриншот поиска XamlPath для кнопки “Browse”. Если вам покажется сложным поиск с помощью WPF Inspector, то можно воспользоваться другими инструментами.

Все элементы главного окна в классе MainWindow являются WPF-элементами, поэтому использование White ни к чему. В случае контролов WinForms, который появляется при выполнении действий над WPF-элементами вам следует передать обьект White в конструктор.

Использование обьекта White для поиска элементов WinForms будет рассмотрено в следующей статье.