Pixel perfect тестирование — это метод, с помощью которого проверяется визуальная точность отображения интерфейса веб-приложения. Этот тип тестирования особенно важен, когда необходимо убедиться, что веб-страница отображается на экране пользователя точно так, как задумано дизайнером, без искажений, артефактов или ошибок верстки.
В WebdriverIO реализовать такие тесты можно с помощью нескольких подходов, включая использование снимков экрана и специализированных библиотек для визуального сравнения. Рассмотрим основные аспекты pixel perfect тестирования и их интеграцию с WebdriverIO.
Pixel perfect тесты проверяют каждый пиксель интерфейса на соответствие эталонному изображению. Важно, чтобы результаты тестирования были точными, и любые изменения в визуальном представлении интерфейса можно было бы быстро обнаружить.
Для реализации такого подхода часто используются два метода:
Для выполнения pixel perfect тестов в WebdriverIO требуется несколько ключевых шагов.
Установка зависимостей Для начала необходимо установить пакет, который будет отвечать за создание и сравнение изображений. Для этого можно использовать библиотеку wdio-image-comparison-service.
npm install --save-dev wdio-image-comparison-serviceКонфигурация WebdriverIO В конфигурационном файле WebdriverIO нужно подключить сервис для визуальных проверок.
exports.config = {
services: ['image-comparison'],
imageComparison: {
baselineFolder: './baseline', // Папка с эталонными изображениями
formatImageName: '{tag}', // Формат имени файла для изображений
screenshotPath: './screenshots', // Папка для скриншотов
savePerInstance: true, // Сохранение скриншотов для каждого теста
blockOutStatusBar: true, // Убирает статус-бар с устройств в мобильной версии
},
};Настройка базы эталонных изображений Для каждого
теста необходимо подготовить эталонное изображение, которое будет
служить для сравнения. Обычно эти изображения сохраняются в отдельной
папке (например, ./baseline). Важно, чтобы скриншоты
сохранялись с четкими метками (например, по названию теста или
страницы), чтобы избежать путаницы.
Снимок экрана Для выполнения pixel perfect тестирования в WebdriverIO создается тест, который будет снимать скриншоты страницы или ее части. Сначала необходимо установить точку, с которой будет сниматься экран.
describe('Pixel perfect тест', () => {
it('Проверка главной страницы', () => {
browser.url('https://your-website.com'); // Открыть страницу
const screenshot = browser.saveScreenshot('./screenshots/homepage.png'); // Сохранить скриншот
});
});Сравнение изображений После того как скриншот
будет сделан, его необходимо сравнить с эталонным изображением. Для
этого используется метод toHaveSameDimensions и
toBeExactlyOnScreen.
describe('Pixel perfect тест', () => {
it('Проверка главной страницы', () => {
browser.url('https://your-website.com');
const screenshot = browser.saveScreenshot('./screenshots/homepage.png');
// Сравнение с эталонным изображением
expect(screenshot).toBeExactlyOnScreen('./baseline/homepage.png');
});
});Работа с визуальными различиями Если различия между текущим и эталонным изображением превышают установленный порог, тест будет считаться не пройденным, и можно будет просмотреть диффы. Они отображают все различия между изображениями, помогая быстро идентифицировать источник ошибки.
describe('Pixel perfect тест', () => {
it('Проверка главной страницы', () => {
browser.url('https://your-website.com');
const screenshot = browser.saveScreenshot('./screenshots/homepage.png');
// Сравнение с эталонным изображением
expect(screenshot).toHaveImageComparison('./baseline/homepage.png');
});
});Pixel perfect тесты могут затрудняться, если веб-страница адаптивна, т.е. изменяет свою верстку в зависимости от устройства или разрешения экрана. В таком случае необходимо учитывать разные размеры экранов, ориентации и плотности пикселей.
Проверка для разных разрешений экрана
Для того чтобы проверить страницу на разных устройствах, можно использовать различные размеры экранов:
describe('Pixel perfect для разных разрешений', () => {
it('Проверка на мобильном устройстве', () => {
browser.setWindowSize(375, 667); // Размер экрана для мобильного устройства
browser.url('https://your-website.com');
const screenshot = browser.saveScreenshot('./screenshots/mobile_homepage.png');
expect(screenshot).toBeExactlyOnScreen('./baseline/mobile_homepage.png');
});
it('Проверка на десктопе', () => {
browser.setWindowSize(1366, 768); // Размер экрана для десктопа
browser.url('https://your-website.com');
const screenshot = browser.saveScreenshot('./screenshots/desktop_homepage.png');
expect(screenshot).toBeExactlyOnScreen('./baseline/desktop_homepage.png');
});
});Использование различных устройств с помощью эмуляции
Для тестирования на различных мобильных устройствах можно использовать эмуляцию через WebdriverIO:
describe('Pixel perfect на мобильном устройстве', () => {
it('Проверка страницы на iPhone 6', () => {
browser.url('https://your-website.com');
browser.setViewportSize({ width: 375, height: 667 }); // Эмуляция iPhone 6
const screenshot = browser.saveScreenshot('./screenshots/iphone6_homepage.png');
expect(screenshot).toBeExactlyOnScreen('./baseline/iphone6_homepage.png');
});
});Для страниц, содержащих динамические элементы, такие как модальные окна, слайдеры или анимации, требуется особая осторожность. Из-за их поведения скриншоты могут изменяться даже при отсутствии видимых ошибок.
Ожидание стабильности элементов
Чтобы избежать проблем с динамическими элементами, рекомендуется
добавлять явные ожидания для стабилизации страницы перед созданием
скриншота. Это можно сделать с помощью команды
waitForDisplayed или waitUntil:
describe('Pixel perfect с динамическими элементами', () => {
it('Проверка страницы с модальным окном', () => {
browser.url('https://your-website.com');
const modal = $('#modal');
modal.waitForDisplayed({ timeout: 5000 }); // Ожидание появления модального окна
const screenshot = browser.saveScreenshot('./screenshots/modal_open.png');
expect(screenshot).toBeExactlyOnScreen('./baseline/modal_open.png');
});
});Pixel perfect тестирование имеет ряд ограничений и сложностей:
Для работы с этими проблемами можно использовать дополнительные настройки пороговых значений и фильтрацию малых различий, которые не влияют на визуальную корректность.
Pixel perfect тестирование в WebdriverIO позволяет эффективно контролировать визуальное представление интерфейса, обеспечивая точность и соответствие дизайну. Использование снимков экрана и сервисов для сравнения изображений позволяет автоматически выявлять ошибки в отображении, обеспечивая высокое качество и стабильность веб-приложений.