#Java #qaguru
Скриншотные тесты - неизбежная необходимость во многих проектах, особенно где есть всякие красивые графики и диаграммы в canvas. Проверяется это только скриншотными тестами, и если мы используем Selenide, то понадобиться еще какая-нибудь библиотека-сравнивалка.
Самая известная из них -
ashot от Яндекса.
Тогда наш код может выглядеть примерно так:
assertFalse(
new ImageDiffer().makeDiff(
expectedImage,
ImageIO.read(requireNonNull($("canvas[role='img']").screenshot()))
).hasDiff()
);
где
ImageDiffer - класс из ashot,
expectedImage - ожидаемое изображение, которое у вас где-то в ресурсах, завернутое в
BufferedImage.
Этот код всем неплох (и даже прекрасно прячется внутрь PageObject), но у меня к нему есть вопросы:
1) В случае падения именно этого ассерта, нам нужен совершенно
специфичный формат Allure Attachment:
Allure.addAttachment(
"Screenshot diff",
"application/vnd.allure.image.diff",
objectMapper.writeValueAsString(screenDif)
);
2) Нам надо иметь возможность перезаписать expected изображения запустив тест со специальным флагом (например, у нас новый браузер и в нем canvas выглядит слегка по другому).
3) Задачи 1 и 2 хотелось бы делать где-то под капотом, что бы наш код тестов вообще ничего не знал об этих особенностях.
Все эти пункты можно изящно решить с помощью JUnit Extensions, и это один из практических примеров, которые я рассказываю на своем
авторском курсе для java автоматизаторов, который стартует буквально на следующей неделе. Наши скриншотные тесты будут простыми, а все, что сложнее ассерта - будет жить в
Extension.
Приходите послушать меня и Мишу Рубанова в 54 сериях, я гарантирую, что это будет интересно 🚀