Дано: WPF приложение, в котором помимо стандартных контролов, еще к "счастью" используются нестандартные - RadControls от Telerik.
Задача: Автоматизировать данное приложение посредством любого инструментария на рынке.
Решение
В ходе инвестигейшина выяснилось, что в большинстве используемых контролов в приложении, не реализована поддержка AutomationPeer. Telerik не имплементировал данный механизм, поэтому автоматизация посредством CodedUI отпала. Контролы не распознаются, и соответственно методы и пропертя не экспоузятся для действий и верификаций.
Дальше пал взгляд на два других инструмента: Test Studio от тех самых Telerik, и студии от Ranorex. Второй еще не использовался в бою, а вот с первым идет работа. Telerik"и грозятся, что их инструмент сможет справиться со всеми их контролами. Убеждают, что у них есть классы-обертки для работы с их контролами, с которыми сейчас и работаю. Чем обеспокоен я? Я не сторонник инструментов Record&Playback. К тому же, платить за 60% функционала, который я не буду использовать при автоматизации - не хочется. Я хочу найти обычную библиотеку с доступным API, и писать код вручную.
Вопрос к Вам: Сталкивались ли вы с подобной ситуацией, и если да, то какой инструмент вы использовали для подобной адачи?
Мой инвестигейшин продолжается. Если интересно, могу периодически писать, как идет дело.
Сталкивались с инфраджистиковским гридом (за три штуки продают плагин для QTP или Rational, Coded UI тоже видит с последним фиче-паком). Ну что делать, селект в гриде делали через MS UI Automation (бег перебором строк и проверкой значений) + клики через Win32 по подходящим строках, с Ctrl.
Что можно посоветовать:
1) скачать и поставить Feature Pack2 к Coded UI (dll'ка где-то на codeplex.com, забыл название - омжно поискать, обычно в членах микрософтовских проектов есть мембер Microsoft). С этим паком видит заметно больше (у меня в отделе Coded UI не используется, просто проверяли, как работает)
3) http://uiautomation.codeplex.com/ соединяет в себе стандартную MS UI Automation и работу через Win32. Мы пользуемся этим. Можно не пользовать record/playback, но рекомендуется посматривать на контролы через UIAutomationSpy, он и код покажет для контрола (как сможет). Платить точно ничего не надо.
4) ну и куча всего ещё: голая MS UI Automation (версия для C++ самая "сильная"), white, какой-то из wati*, кажется watin.
У нас народ даже пользовал их фреймворк для тестирования обычных WPF-приложений, вместо Coded UI - понравилось больше. Вопрос, кстати, был "Вопрос к Вам: Сталкивались ли вы с подобной ситуацией, и если да, то какой инструмент вы использовали для подобной адачи?" Поэтому и рассматривать такую халяву, как "производитель предоставляет фреймворк" даже как-то странно. :)
Т.е., ответом могло бы быть: "а мы тестируем инфраджистикс без QTP и Rational так", "а мы тестируем девэкспресс без тесткомплита так". :) Например, в нашем случае это труднопробиваемый менеджмент, для которого необходимость тестирования приложения ещё не является обоснованием для покупки тула (ежемесячная прибыль от продукта всего лишь в сто-тысячу раз превышает затраты на такой тул), обоснование должно быть более обосновательным...
Большое спасибо Всем за ответы. Есть очень хорошие идеи. Мой инвестигейшин продолжается. Отпишусь позже, когда будут какие-либо существенные результаты.
У меня была идея инджектить на тестируемую форму два поля с кнопкой, хостить IronPython движок, и в автоматизированном тесте пейстить какое-либо выражение в первое текстовое поле, нажимать кнопку, его процессит движок Питона, и результат выводит во втором текстовом поле. Извращение еще то, но что-то в этом есть.
Вторая идея, это унаследоваться от RadControls, и реализовать OnAutomationPeer. Прокидывать прокси объект с необходимыми пропертями и методами и использовать из автотестов. Но изобретать велосип вместо фокуса на автоматизации не есть хорошо.
А вот есть же способ: http://testapi.codeplex.com/releases/view/60572 в архиве: Documentation -> Concepts -> Concepts -- Application Control. Позволяет запускать как out-of-process, так и in-process. WPF-приложения можно запускать как в отдельном треде (доступ через рефлексию), так и на том же самом треде, как и тестовый код (доступ через точечную нотацию). Кстати, один из авторов этого фреймворка является тест-менеджером WPF.