Cypress изначально разрабатывался как инструмент для тестирования веб-приложений в браузере на десктопе, однако современная версия предоставляет возможности для адаптации тестов под мобильные устройства. Основная цель — эмуляция мобильного окружения, проверка адаптивности интерфейса и корректного поведения функционала при различных разрешениях экранов и взаимодействиях с сенсорными элементами.
Cypress позволяет изменять размеры окна браузера и User-Agent для имитации различных мобильных устройств. Основные методы:
cy.viewport(width, height)
cy.viewport('iphone-6')
cy.viewport('ipad-2', 'landscape')
cy.viewport(width, height) — задаёт точные размеры
экрана в пикселях. Используется для тестирования нестандартных
разрешений.cy.viewport(device) — предустановленные размеры
популярных устройств, таких как 'iphone-6',
'ipad-2', 'macbook-15'.cy.viewport(device, orientation) — дополнительно
позволяет выбирать ориентацию ('portrait' или
'landscape'), что важно для проверки адаптивного
интерфейса.Важно учитывать, что cy.viewport изменяет размеры окна
браузера, но не полностью эмулирует сенсорный ввод и аппаратные
особенности мобильного устройства. Для этого используются дополнительные
подходы.
Для тестирования мобильного интерфейса необходимо убедиться, что элементы корректно отображаются и взаимодействуют в узких экранах. Основные аспекты:
cy.get('.menu-button').should('be.visible')
cy.get('.mobile-header').should('exist')
cy.get('.burger-menu').click()
cy.get('.menu-items').should('be.visible')
.should('have.css', 'property', 'value') для проверки
адаптивной стилизации:cy.get('.content').should('have.css', 'font-size', '14px')
.scrollIntoView() и .trigger() для имитации
свайпов:cy.get('.carousel').trigger('swipeleft')
cy.get('.footer').scrollIntoView()
Для проверки взаимодействия, характерного для мобильных устройств,
применяются события touchstart, touchmove,
touchend. Пример эмуляции касания:
cy.get('.draggable').trigger('touchstart', { touches: [{ clientX: 50, clientY: 100 }] })
cy.get('.draggable').trigger('touchmove', { touches: [{ clientX: 150, clientY: 100 }] })
cy.get('.draggable').trigger('touchend')
Это позволяет проверять перетаскивание элементов, свайпы, жесты масштабирования и другие сенсорные интеракции.
Мобильные браузеры часто ограничены по ресурсам. В Cypress возможна проверка производительности через следующие методы:
cy.intercept() для симуляции медленного соединения:cy.intercept('/api/data', (req) => {
req.on('response', (res) => {
res.setDelay(2000) // задержка 2 секунды
})
})
.should('be.visible') и cy.clock() можно
отслеживать задержки рендеринга.Для комплексной проверки мобильного интерфейса необходимо запускать тесты на разных браузерах и операционных системах. Cypress поддерживает:
// Пример конфигурации Cypress для разных viewport
const devices = [
{ name: 'iPhone 12', width: 390, height: 844 },
{ name: 'Pixel 4', width: 411, height: 915 }
]
devices.forEach(device => {
describe(`Тестирование на ${device.name}`, () => {
beforeEach(() => {
cy.viewport(device.width, device.height)
})
it('Проверка адаптивного меню', () => {
cy.visit('/mobile-page')
cy.get('.menu-button').click()
cy.get('.menu-items').should('be.visible')
})
})
})
Мобильное тестирование с Cypress эффективно интегрируется в пайплайны CI/CD. Для этого:
Применение Cypress позволяет не только проверять функциональность, но и автоматизировать рутинные проверки адаптивности, снижая риск ошибок при выпуске обновлений интерфейса для мобильных устройств.
Тщательное использование Cypress в мобильном контексте позволяет создать надёжный слой автоматизированного тестирования интерфейсов, выявлять проблемы адаптивности и обеспечивать стабильность пользовательского опыта на разных устройствах.