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

Фотография

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


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 3

#1 blackdef

blackdef

    Новый участник

  • Members
  • Pip
  • 15 сообщений
  • ФИО:Плотников Федор


Отправлено 11 января 2013 - 07:54

Команда занимается разработкой приложения на база .NET и WPF.
Сейчас встал вопрос об автоматизации ряда UI-тестов, но не прибегая к сторонним инструментам как к примеру TestComplite.
И тут посыпались проблемы. Для этих целей у MS и VS2012 есть Coded UI test, которые автоматически генерируются при помощи специального TestBuilder-а
Проблемы связаны с невозможностью однозначной идентификации визуальных компонентов в runtime, т.к. эти компоненты генерируются динамически.
MSDN рассказывает про некоторую Модель Автоматизированного тестирования пользовательского интерфейса (UI Automation), в соответствие с которой необходимо "правильно" кодировать сами компоненты, что бы TestBuilder мог эти компоненты опознавать.
Суть вопроса и задача данной темы, которые хотелось бы решить:
1. Получить консультацию (практическую) что и как надо делать для реализации автоматизированного тестирования UI в WPF приложениях при использования VS2012.
2. Обмен опытом по внедрению автоматизации UI

Надеюсь что среди форумчан найдется тот кто прошел этот путь или так же как и я в его начале и представляет как и куда идти дальше.
  • 0

#2 checo

checo

    Опытный участник

  • Members
  • PipPipPipPip
  • 400 сообщений
  • Город:Н.Новгород

Отправлено 11 января 2013 - 11:30

Опыта внедрения нет, сами готовимся. :smile:

Возможно, будут полезны соображения:

1. В .NET есть сборка UI Automation Client, для которой вроде бы не надо какой-то особой модели кодирования. AutomationID по умолчанию устанавливается равным имени объекта.
Можно установить Windows SDK, там есть программулина Inspect Objects, которая показывает и AutomationID, и все остальные необходимые свойства, например, поддерживаемые паттерны.

2. При записи через рекордер VS получается страшный линейный г*нокод. Если в проекте недостаточно подхода Record-and-Replay с последующей поддержкой тем же способом, то так или иначе придете к созданию своего фреймворка и к прямому кодированию.
Если знакомы со сторонними средами, с тем же TestComplete, то там есть функции типа WaitWindow, FindChild и т.п., которые описывают классические паттерны взаимодействия с классическими элементами управления.
В связи с тем, что модель WPF настолько гибкая и абстрактная, то методы взаимодействия, прописанные в System.Windows.Automation, тоже чрезвычайно абстрактны. Удобные методы для элементов своего окошка придется хорошо продумать и написать самостоятельно.
  • 0

#3 rabsi

rabsi

    Новый участник

  • Members
  • Pip
  • 9 сообщений
  • ФИО:Фалилеева Елена
  • Город:Ростов-на-Дону

Отправлено 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 хранить методы, которые выполняют действия в окне.
  • 1

#4 temagi

temagi

    Новый участник

  • Members
  • Pip
  • 2 сообщений
  • ФИО:Артем

Отправлено 08 февраля 2013 - 09:14

Советую попробовать White (ОфСайт,Пример на Хабре), это что-то вроде надстройки для UIAutomation, только более приятный синтаксис. Проект был не особо активен последние полгода, но сейчас его перекупили и активно допиливают. Обсуждения ведутся как на гитхабе, так и группе в гугл+
Сейчас работаю с ним, но главная проблема - нестандартные контролы, самописанные или готовые, вроде Devexpress. Как обрабатывать их, пока еще не придумали.
  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных