Назревает задача покрыть автотестами десктопное windows приложение, внутри которого используется веб-клиент и отрисовка контента средствами джава-скрипта.
Объекты, которые создаются посредством JS, не доступны извне для управления. Склоняюсь в сторону средств визуальной автоматизации.
Поделитесь пожалуйста, есть ли success-stories при использовании Sikuli или чего-то подобного?
Автоматизировал десктопное приложение под OS X. Единственная сложность была в поддержке разных версий ОС. Имею в виду, что после обновления на следующую версию менялись например шрифты. И приходилось заново скриншотить. А вообще я остался доволен.
Использовал вот в такой связке Maven + Java + SikuliX + Cucumber. Здесь на сайте где-то был пример на Java c использованием паттерна Page Object.
Я так понимю под ваши цели WinAppDriver не подойдет ?
Приложение рисует только то что приходит извне?
Если оно постоянно слушает сокет и реагирует на него, то можно найти Win32Api контролы для управления приложением и тыкать их когда надо, а результат того что отправляется на сервер или получается от сервера корректировать промежуточным прокси.
Например, есть кнопка “Показать кошек”, по нажатию приложение отправляет реквест https://server/api/showCats.php . Респонс отрисовывается в приложении. Респонс скорее всего будет html доком. Находим Win32 контрол в приложении, его х и у кординаты, запускаем ивент мышеклик по кординатам тем же Вин32. На проксе перехватываем запрос, проверяем его, меняем если хотим. Получаем ответ от сервера, парсим в своем собственном Html парсере, чтобы проверить что дока верно построена, дальше правим респонс на показ собак, если надо.
Здесь либо такие костыли, либо косяки от фейлов распознавания образов. А вобще, на примере скайпа, вся функциональность содержится в .lib/.so библиотеках, ехе только рисует. По-этому для тестирования просто бралась либа и писался свой клиент скайпа в который были захардкожены нужные степы тестов. Всё это компилилось в экзе и в результате просто получали хеадлесс клиент скайпа, который запускался, делал что надо, проверял что получил что надо и выключался. Возможно вам тоже подойдет подход с разработкой своих мини версий приложений.
Сперва была идея писать тесты на gtest, но так как проект давно легаси, и текущие мейнтейнеры только периодически правят конфиги, и с трудом могут сказать, как это устроено внутри, а набор кейсов довольно простой, решили остановиться на варианте визуального тестирования.