В автоматизированном тестировании веб-приложений часто возникает необходимость проверки поведения интерфейса при изменении ориентации экрана. Cypress предоставляет гибкие возможности для имитации разных размеров и ориентаций экрана, что особенно актуально при тестировании адаптивного дизайна.
Основным методом для управления размерами окна в Cypress является
команда cy.viewport(). Она позволяет задать ширину и высоту
окна в пикселях либо использовать предустановленные размеры популярных
устройств.
Синтаксис команды:
cy.viewport(width, height)
cy.viewport(preset, orientation)
width и height — числовые значения ширины
и высоты окна.preset — строковое название устройства
('iphone-6', 'ipad-2',
'macbook-15' и т.д.).orientation — ориентация экрана:
'portrait' или 'landscape'.Пример смены ориентации iPhone 6 на портретную и ландшафтную:
cy.viewport('iphone-6', 'portrait')
cy.viewport('iphone-6', 'landscape')
Для проверки адаптивного поведения интерфейса после смены ориентации
важно комбинировать cy.viewport() с проверкой элементов
страницы. Обычно тест включает:
Пример теста адаптивного меню:
describe('Адаптивное меню при смене ориентации', () => {
it('Проверка отображения меню на iPad', () => {
cy.visit('/dashboard')
cy.viewport('ipad-2', 'portrait')
cy.get('.sidebar').should('be.visible')
cy.viewport('ipad-2', 'landscape')
cy.get('.sidebar').should('not.be.visible')
cy.get('.hamburger-menu').should('be.visible')
})
})
В данном примере проверяется, что боковая панель скрывается в ландшафтной ориентации, а вместо неё отображается «гамбургер-меню».
Cypress позволяет циклически проверять интерфейс на нескольких устройствах и ориентациях, что упрощает тестирование адаптивности:
const devices = [
{ name: 'iphone-6', orientations: ['portrait', 'landscape'] },
{ name: 'ipad-2', orientations: ['portrait', 'landscape'] },
{ name: 'macbook-15', orientations: ['landscape'] }
]
devices.forEach(device => {
device.orientations.forEach(orientation => {
it(`Проверка ${device.name} в ориентации ${orientation}`, () => {
cy.viewport(device.name, orientation)
cy.visit('/dashboard')
cy.get('.header').should('be.visible')
})
})
})
Такой подход позволяет централизованно проверять множество комбинаций устройств и ориентаций без дублирования кода.
cy.viewport() должна вызываться после
cy.visit(), если требуется точная имитация поведения
страницы при загрузке. В противном случае могут возникнуть
некорректные рендеры элементов, особенно при использовании медиазапросов
CSS.После смены ориентации важно проверять не только визуальное отображение, но и интерактивные элементы:
cy.viewport('iphone-6', 'landscape')
cy.get('.hamburger-menu').click()
cy.get('.sidebar').should('be.visible')
cy.get('.close-menu').click()
cy.get('.sidebar').should('not.be.visible')
Такой подход гарантирует, что элементы интерфейса корректно реагируют на действия пользователя в разных ориентациях.
beforeEach для установки базовой ориентации перед каждым
тестом.Эти методы позволяют создавать надежные и масштабируемые тесты интерфейсов, которые корректно отображаются на любых устройствах и при любой ориентации экрана.