Cypress предоставляет мощные возможности для проверки визуального
состояния элементов через их CSS-свойства. Это позволяет не только
убедиться в правильной функциональности, но и контролировать
соответствие дизайна требованиям. Проверка CSS может быть выполнена с
использованием команды .should() или .then(),
позволяя анализировать как стандартные свойства, так и вычисленные стили
элементов.
Для доступа к CSS-свойствам используется команда
.should('have.css', property, value):
cy.get('.button-primary')
.should('have.css', 'background-color', 'rgb(0, 123, 255)');
property — имя CSS-свойства в формате JavaScript
(background-color, font-size,
display и т.д.).value — ожидаемое значение свойства. Для цветов чаще
используется формат rgb() или rgba().Важно учитывать, что Cypress получает вычисленные стили, а не только указанные в CSS-файле. Например, цвет шрифта может быть унаследован от родительского элемента, и Cypress вернёт реальное значение, применяемое в DOM.
Для проверки нескольких свойств можно использовать цепочку
.should():
cy.get('.card')
.should('have.css', 'border-radius', '8px')
.and('have.css', 'box-shadow', 'rgba(0, 0, 0, 0.15) 0px 4px 6px');
Также можно получить объект всех вычисленных стилей через
.then():
cy.get('.header').then($el => {
const color = $el.css('color');
const fontWeight = $el.css('font-weight');
expect(color).to.eq('rgb(33, 37, 41)');
expect(fontWeight).to.eq('700');
});
Такой подход полезен, когда нужно выполнить более сложные проверки
или сравнения значений, которые нельзя проверить напрямую через
.should().
Некоторые CSS-свойства влияют на видимость элемента:
display, opacity, visibility.
Cypress позволяет проверять эти свойства напрямую:
cy.get('.modal')
.should('have.css', 'display', 'block')
.and('have.css', 'opacity', '1');
display: none или opacity: 0 делает
элемент невидимым, что может быть ключевым при тестировании модальных
окон и выпадающих меню..should('be.visible') для логической проверки
видимости.CSS-свойства width, height,
margin, padding, top,
left играют важную роль в проверке макета:
cy.get('.banner').then($el => {
const width = $el.width();
const height = $el.height();
expect(width).to.be.greaterThan(300);
expect(height).to.eq(200);
});
.width() и
.height(), возвращают численные значения в пикселях..css()
позволяет убедиться, что элементы выровнены корректно.Для элементов с анимациями или интерактивными эффектами, такими как hover или focus, проверка CSS требует использования методов Cypress для эмуляции состояний:
cy.get('.nav-link')
.trigger('mouseover')
.should('have.css', 'color', 'rgb(255, 0, 0)');
cy.get('input')
.focus()
.should('have.css', 'border-color', 'rgb(0, 123, 255)');
trigger('event') позволяет активировать псевдоклассы
CSS (:hover, :focus,
:active).Cypress поддерживает изменение размеров окна через команду
.viewport():
cy.viewport(375, 667); // iPhone 6/7/8
cy.get('.menu').should('have.css', 'display', 'none');
.viewport() и проверки display
или flex-direction эффективно для тестирования мобильной
версии интерфейсов.Некоторые CSS-свойства, например transform,
transition или box-shadow, имеют сложные
значения. Для проверки их корректности применяется .then()
с точным сравнением:
cy.get('.card')
.then($el => {
const transform = $el.css('transform');
expect(transform).to.eq('matrix(1, 0, 0, 1, 0, 0)');
});
matrix, rgba и т.д.).cy.wait()).rgb()
вместо hex), так как Cypress возвращает computed style..then() и
jQuery-методы.Проверка CSS в Cypress позволяет сочетать функциональные и визуальные тесты в единой среде, обеспечивая надежность интерфейса и соответствие дизайну без дополнительного визуального тестирования.