Перейти к содержимому

Публикации rabsi

1 публикаций создано rabsi (учитываются публикации только с 06 мая 2023)


#113490 Автоматизация тестирования UI в WPF приложений средствами MS (Coded UI

Отправлено автор: rabsi 11 января 2013 - 14:09 в Автоматизированное тестирование

1. Visual Studio 2010
Мы занимались автоматизацией UI WPF приложения в Visual Studio 2010. Там мы отказались от использования UIMap, в которых содержится сгенерированный для тестов код, потому что такую структуру на наш взгляд тяжело было поддерживать. При написании тестов был использован паттерн PageObject (для desktop-приложений можно назвать его WindowObject, суть одна и та же). Если кратко, для каждого окна приложения (или какой-то логической части окна) создается класс, который содержит контролы в виде свойств класса, и действия над контролами в этом окне в виде методов класса. Проверки в такие классы WindowObject'ов не помещают. Тогда тестовый метод состоит из вызовов методов таких классов WindowObject'ов и проверок.
В принципе, UI Automation вам изучать не надо, потому что Coded UI Test работает поверх этой библиотеки. Нужно будет только научиться работать с классами контролов из Coded UI Test (WpfButton, WpfText и т.д.). Coded UI Test ищет контролы в окне по указанным свойствам поиска и типу контрола. Универсальным и однозначно идентифицирующим свойством для поиска является свойство WpfControl'а "AutomationId". Получается сначала нужно установить WPF контролу свойство AutomationId (в xaml'е оно называется "UId"). В нашем продукте не было динамической генерации компонентов, так что тут вам нужно будет подумать. И затем в коде вашего класса WindowObject'а указать это свойство. Например, у нас это выглядит так:

WpfButton button = new WpfButton();
button.SearchProperties[WpfControl.PropertyNames.AutomationId] = "A57D5E77-9EF6-4074-A9E2-2F5D36DFD8A4";

Для просмотра визуального дерева автоматизируемых контролов (т.е. тех, которые распознаются библиотекой UIAutomation) вашего приложения можно использовать утилиту UISpy. При поиске контролов вам нужно указывать, внутри какого контрола искать данный контрол, поэтому просмотр такого дерева может быть полезен.

2. Visual Studio 2012
Мы только готовимся к переходу на 2012 студию и пока изучаем новые возможности. На данный момент могу сказать, что в процесс генерации тестов при помощи Coded UI Test Builder были внесены существенные улучшения. Файлы UIMap уже более удобные для поддержки и просмотра содержимого, и вообще сама эта концепция карт напоминает паттерн PageObject. Если вы посмотрите, каждый такой файл состоит из двух - UIMap.cs и UIMap.Designer.cs. Содержимое второго файла менять не нужно, поскольку при генерации какого-то нового метода все изменения удалятся. Пока я вижу преимущество использования такого файла в том, что удобнее создавать дерево контролов при помощи билдера, чем писать все это с нуля вручную. Т.е. структуру окна можно хранить в сгенерированном виде в файле UIMap.Designer.cs, а в файле UIMap.cs хранить методы, которые выполняют действия в окне.