Visual testing в контексте автоматизации веб-приложений предполагает проверку визуального представления интерфейса, включая корректное отображение элементов, их положение, цветовые схемы и адаптивность. Protractor, будучи инструментом для end-to-end тестирования Angular-приложений, позволяет интегрировать визуальные проверки через сторонние библиотеки.
Сравнение скриншотов (Snapshot testing) Позволяет захватывать текущий вид страницы или элемента и сравнивать с эталонным изображением. Любое расхождение фиксируется как ошибка. Такой подход подходит для:
Проверка стилей через DOM В отличие от скриншотов, этот метод анализирует свойства элементов, извлекаемые через CSS. Проверяются:
color, background-color);width, height,
top, left);font-size, font-family,
font-weight). Этот способ более устойчив к незначительным
изменениям рендеринга, например, различиям в сглаживании шрифтов.Для Protractor нет встроенных инструментов для полноценного визуального тестирования, поэтому используются сторонние решения:
Protractor + WebDriverCSS Позволяет создавать и сравнивать скриншоты отдельных элементов или всей страницы. Основные шаги:
browser.takeScreenshot().Protractor + Applitools Eyes Коммерческое решение для визуального тестирования, которое:
eyes.checkWindow() и eyes.close().Выбор элементов для тестирования Проверять стоит критичные компоненты: кнопки, формы, панели, всплывающие окна. Неэффективно захватывать всю страницу, если достаточно проверить отдельные элементы.
Настройка эталонных скриншотов Эталонные изображения должны быть стабильными и обновляться только при осознанных изменениях интерфейса. Использование автоматических перезаписей может привести к потере контроля над регрессиями.
Обработка динамического контента Элементы с изменяемым содержимым (даты, списки, баннеры) могут создавать ложные ошибки. Рекомендуется:
Тестирование адаптивного дизайна Важно проверять
интерфейс на разных разрешениях экрана. Protractor позволяет изменять
размеры окна через
browser.manage().window().setSize(width, height).
Скриншот элемента с WebDriverCSS:
const wdcss = require('webdrivercss');
describe('Visual check', () => {
it('should match the login button', async () => {
await browser.get('https://example.com/login');
const result = await wdcss(browser, {
name: 'login_button',
elem: '#loginButton',
mismatchTolerance: 0.1
});
expect(result.misMatchPercentage).toBeLessThan(0.1);
});
});
Использование Applitools Eyes:
const { Eyes, Target } = require('@applitools/eyes-protractor');
describe('Visual testing with Applitools', () => {
const eyes = new Eyes();
beforeAll(async () => {
eyes.setApiKey('YOUR_API_KEY');
});
it('should display the homepage correctly', async () => {
await eyes.open(browser, 'Example App', 'Homepage Visual Test');
await browser.get('https://example.com');
await eyes.check('Homepage', Target.window());
await eyes.close();
});
afterAll(async () => {
await eyes.abortIfNotClosed();
});
});
Визуальные тесты обычно сопровождаются графическими отчетами:
Регулярное использование визуального тестирования позволяет поддерживать стабильный внешний вид приложения, предотвращает визуальные регрессии и ускоряет процесс контроля качества при разработке интерфейсов.