Тестирование flash-приложения или java-апплета с помощью Sikuli
Введение
Иногда при тестировании возникает ситуация когда необходимо проверить работу компонента, с которым невозможно взаимодействовать с помощью Selenium. Например когда приложение использует карту (Google, Yandex maps), когда есть flash-приложение или апплет. В таких ситуациях поможет такой инструмент как Sikuli.
Что такое Sikuli? Если говорить коротко, то это симбиоз из класса Robot и библиотеки компьютерного зрения OpenCV. Если поподробнее, то это инструмент для автоматизации действий над приложением посредством скриншотов элементов этого приложения. Т.е. вы продумываете действия по совершению определённой операции в приложении, создаёте скриншоты элементов, которые будут использоваться при выполнении этих действий и пишите код, используя API Sikuli, который будет использовать подготовленные изображения и выполнять нужные действия. Например вы хотите проверить работу кнопки печать страницы , для этого вы делаете скриншот этой кнопки , затем, используя Sikuli API, находите регион, где расположена эта кнопка, наводите на этот регион мышь и нажимаете на кнопку.
Установка
Установка описывается для последней версии Sikuli 1.0.1, sikuli-api 1.0.2.Скачать sikuli-api.jar https://code.google.com/archive/p/sikuli-api/downloads
Скачать sikuli-setup.jar https://launchpad.net/sikuli/+download
Запустить sikuli-setup, появится окно
Затем зайти в указанную в диалоговом окне директорию и запустить runSetup.cmd
появится следующее окно
нажимаем ок
Для программирования на Java достаточно выбрать пункт 4 и 6.
Далее нажимаем Setup Now
Появится окно подтверждения, соглашаемся
Затем инсталлятор должен будет скачать необходимые файлы
Затем добавьте два jar’ника (sikuli-api и sikuli-java) в classpath
Пример работы
Рассмотрим простой пример работы с Sikuli, например, нам нужно протестировать смену разрешения в плеереДля тестирования смены разрешения с помощью Sikuli мы сделаем следующие действия:
- Откроем браузер с помощью Selenium и перейдём на страницу с плеером
- Нажмём на иконку “Settings”
- Найдя надпись “quality”
, определим что нужное нам меню открылось
- Выберем разрешение “480p”
- Повторим шаги 1 и 2
- Проверим, что чекбокс стоит напротив надписи “480p”
Код
Я не буду описывать как инициализировать и запустить Webdriver и перейти на нужную страницу, а сразу приступлю к описанию кода, который использует Sikuli API, так как статья посвящена только знакомству с этим инструментом.
Для начала создаём глобальные объекты, которые нам понадобятся для тестирования, это Firefox, регион рабочего стола, и мышь.
final App app = new App("Firefox");
final ScreenRegion s = new DesktopScreenRegion();
final Mouse mouse = new DesktopMouse();
Затем фокусируемся на браузере
app.focus();
Объявляем изображения, которые будут использоваться в тесте
final Target targetSettings = new ImageTarget(new File("settings.PNG")); final Target targetQuality = new ImageTarget(new File("quality.PNG")); final Target target480p = new ImageTarget(new File("480p.PNG")); final Target targetChecked480p = new ImageTarget(new File("checked_480p.PNG"));
Ищем иконку “settings” и кликаем на неё
findAndClick(s, mouse, targetSettings);
Проверяем, что надпись “quality” присутствует
Assert.assertNotNull(s.find(targetQuality));
Ищем и нажимаем на пункт меню “480p”
findAndClick(s, mouse, target480p);
Ищем и нажимаем на иконку “settings”
findAndClick(s, mouse, targetSettings);
Проверяем, что надпись “quality” присутствует
Assert.assertNotNull(s.find(targetQuality));
Проверяем, что напротив 480p стоит галочка
Assert.assertNotNull(s.find(targetChecked480p ));
Так как у нас в тесте есть повторяющая последовательность действий (найти и кликнуть), то они были вынесены в отдельный метод
private static void findAndClick(final ScreenRegion s, final Mouse
mouse, final Target target) {
final ScreenRegion targetRegion = s.find(target);
Assert.assertNotNull(targetRegion);
mouse.click(targetRegion.getCenter());
}