Cypress предоставляет встроенные механизмы для захвата скриншотов в момент возникновения ошибок, что значительно облегчает диагностику сбоев тестов. Автоматические скриншоты фиксируют состояние приложения в момент падения теста, включая визуальное отображение элементов, что делает их незаменимыми при отладке UI-тестов.
Для активации автоматических скриншотов используется конфигурационный
файл cypress.config.js (или cypress.json в
старых версиях). Основные параметры, отвечающие за скриншоты:
import { defineConfig } from 'cypress'
export default defineConfig({
e2e: {
screenshotsFolder: 'cypress/screenshots',
screenshotOnRunFailure: true
}
})
screenshotsFolder — путь, куда будут
сохраняться скриншоты.screenshotOnRunFailure — при значении
true Cypress автоматически делает скриншот при падении
любого теста.Cypress сохраняет скриншоты с именем, которое отражает структуру теста:
<имя_спецификации>/<название_теста> (failed).png
Пример:
login.spec.js/Login with invalid credentials (failed).png
Такое именование помогает быстро находить нужный скриншот без лишних поисков.
Иногда требуется сделать скриншот в определённой точке теста, независимо от ошибок. Для этого используется команда:
cy.screenshot('custom_name')
Эта команда создаёт скриншот с указанным именем. Также можно настроить полный скриншот страницы или только определённого элемента:
cy.get('.login-form').screenshot('login-form')
Cypress позволяет управлять качеством и разрешением скриншотов:
cy.screenshot('homepage', {
scale: true,
blackout: ['.ads-banner'],
capture: 'runner',
clip: { x: 0, y: 0, width: 800, height: 600 }
})
scale — включает масштабирование
скриншота в соответствии с устройством.blackout — скрывает элементы, которые
не должны попасть на скриншот.capture — определяет, что будет
захвачено: 'viewport' или 'runner'.clip — обрезает область скриншота по
заданным координатам.Cypress предоставляет хук afterEach, который позволяет
делать скриншот при падении теста с дополнительной обработкой:
afterEach(function () {
if (this.currentTest.state === 'failed') {
cy.screenshot(`failure-${this.currentTest.title}`)
}
})
Такой подход позволяет:
Cypress поддерживает запись видео всех тестов. Скриншоты и видео могут быть синхронизированы для более точного анализа:
import { defineConfig } from 'cypress'
export default defineConfig({
video: true,
screenshotsFolder: 'cypress/screenshots',
videoUploadOnPasses: false
})
Видео фиксирует все действия теста, а скриншоты — момент ошибки, что даёт комплексное понимание проблемы.
blackout.При запуске Cypress в CI/CD скриншоты автоматически сохраняются и могут быть загружены в артефакты сборки. Для этого достаточно настроить путь сохранения в конфигурации и убедиться, что папка доступна для извлечения после сборки. Это позволяет мгновенно видеть причины падения тестов без локального запуска.
Автоматические скриншоты в Cypress — мощный инструмент, который делает диагностику тестов прозрачной и структурированной, снижает время на поиск ошибок и повышает стабильность тестового процесса.