Тестирование десктопного приложения через Sikuli ?

Всем привет,

Назревает задача покрыть автотестами десктопное windows приложение, внутри которого используется веб-клиент и отрисовка контента средствами джава-скрипта.

Объекты, которые создаются посредством JS, не доступны извне для управления. Склоняюсь в сторону средств визуальной автоматизации.

Поделитесь пожалуйста, есть ли success-stories при использовании Sikuli или чего-то подобного?

Когда-то давно использовал SikuliX для file upload / drag & drop и работы с mfa в вэбе.

Минусы: не работает headless, нужен active desktop, из коробки не работает ремоутно, чувствителен к смене разрешения / глубины цвета и т.п.

В остальном, с задачами справлялся весьма неплохо.

1 лайк

Автоматизировал десктопное приложение под OS X. Единственная сложность была в поддержке разных версий ОС. Имею в виду, что после обновления на следующую версию менялись например шрифты. И приходилось заново скриншотить. А вообще я остался доволен.
Использовал вот в такой связке Maven + Java + SikuliX + Cucumber. Здесь на сайте где-то был пример на Java c использованием паттерна Page Object.
Я так понимю под ваши цели WinAppDriver не подойдет ?

Хм, вот про WinAppDriver не думал, скорее всего нет, но спасибо! Будет интересно глянуть на этот проект.

Приложение рисует только то что приходит извне?
Если оно постоянно слушает сокет и реагирует на него, то можно найти Win32Api контролы для управления приложением и тыкать их когда надо, а результат того что отправляется на сервер или получается от сервера корректировать промежуточным прокси.
Например, есть кнопка “Показать кошек”, по нажатию приложение отправляет реквест https://server/api/showCats.php . Респонс отрисовывается в приложении. Респонс скорее всего будет html доком. Находим Win32 контрол в приложении, его х и у кординаты, запускаем ивент мышеклик по кординатам тем же Вин32. На проксе перехватываем запрос, проверяем его, меняем если хотим. Получаем ответ от сервера, парсим в своем собственном Html парсере, чтобы проверить что дока верно построена, дальше правим респонс на показ собак, если надо.
Здесь либо такие костыли, либо косяки от фейлов распознавания образов. А вобще, на примере скайпа, вся функциональность содержится в .lib/.so библиотеках, ехе только рисует. По-этому для тестирования просто бралась либа и писался свой клиент скайпа в который были захардкожены нужные степы тестов. Всё это компилилось в экзе и в результате просто получали хеадлесс клиент скайпа, который запускался, делал что надо, проверял что получил что надо и выключался. Возможно вам тоже подойдет подход с разработкой своих мини версий приложений.

Сперва была идея писать тесты на gtest, но так как проект давно легаси, и текущие мейнтейнеры только периодически правят конфиги, и с трудом могут сказать, как это устроено внутри, а набор кейсов довольно простой, решили остановиться на варианте визуального тестирования.