Cypress предоставляет мощный и гибкий механизм для создания скриншотов как целых страниц, так и отдельных элементов DOM. Скриншоты позволяют фиксировать текущее состояние интерфейса для последующего анализа, тестирования визуальных изменений и отладки ошибок. Работа с ними тесно интегрирована с процессом тестирования, что делает Cypress инструментом для комплексного контроля UI.
Скриншот всей страницы Метод
cy.screenshot() делает снимок всей страницы на момент
вызова.
cy.visit('/login');
cy.screenshot('login-page-full');
'login-page-full' задаёт имя файла
скриншота.cypress/screenshots по
структуре, соответствующей структуре тестов.capture: 'runner' для захвата
интерфейса тестового раннера Cypress.Скриншот конкретного элемента Метод
.screenshot() применяется и к элементам DOM, что позволяет
фиксировать только интересующую область.
cy.get('#submit-button').screenshot('submit-button');
Настройка формата и качества Cypress позволяет управлять форматом, качеством и фоном скриншотов через объект настроек:
cy.get('.modal')
.screenshot({
blackout: ['.ads-banner'],
capture: 'viewport',
overwrite: true,
scale: true
});
Описание ключевых опций:
blackout: скрывает чувствительные или динамические
элементы (например, рекламные блоки).capture: 'viewport' — текущая видимая
область, 'fullPage' — весь документ.overwrite: позволяет перезаписывать существующие
файлы.scale: масштабирование изображения для улучшения
качества.Cypress автоматически делает скриншоты при ошибках выполнения тестов, если в настройках включена опция:
// cypress.config.js
module.exports = {
e2e: {
screenshotOnRunFailure: true
}
};
Для тестирования визуальной стабильности интерфейса полезно сочетать
Cypress с библиотеками визуальной регрессии (например,
cypress-image-snapshot). Основная идея: сравнивать текущий
скриншот с эталонным изображением.
Пример интеграции:
import 'cypress-image-snapshot/command';
cy.get('.profile-card').then(($el) => {
cy.wrap($el).toMatchImageSnapshot({
failureThreshold: 0.01,
failureThresholdType: 'percent'
});
});
failureThreshold — допустимое отклонение между
эталонным и текущим изображением.failureThresholdType: 'percent' позволяет задавать
процентное различие вместо пиксельного.Скриншоты динамических элементов Перед созданием скриншота элементов, которые могут изменяться (например, выпадающие меню), рекомендуется использовать команды ожидания:
cy.get('.dropdown-menu').should('be.visible').screenshot('dropdown-menu');Фокус на интерактивных компонентах Можно
сфокусировать скриншот на конкретной части интерфейса с помощью
.scrollIntoView():
cy.get('#important-section').scrollIntoView().screenshot('important-section');Множественные элементы Если необходимо сфотографировать несколько элементов в цикле:
cy.get('.card').each(($el, index) => {
cy.wrap($el).screenshot(`card-${index}`);
});В файле конфигурации cypress.config.js можно задать
глобальные параметры:
module.exports = {
screenshotsFolder: 'cypress/custom-screenshots',
trashAssetsBeforeRuns: true,
screenshotOnRunFailure: true,
screenshotQuality: 90
};
screenshotsFolder — путь к папке для всех
скриншотов.trashAssetsBeforeRuns — удаляет старые скриншоты перед
новым запуском.screenshotQuality — регулирует качество JPEG/PNG
изображений (0–100).capture: 'viewport'
вместо fullPage, чтобы уменьшить размер файла.Скриншоты элементов в Cypress являются не только инструментом отладки, но и основой для построения надежной визуальной регрессии, позволяя контролировать интерфейс на каждом шаге тестирования и фиксировать любые неожиданные изменения.