Тестирование полосовых элементов с помощью Cypress

В этой статье мы рассмотрим, как мы можем протестировать веб-сайт, который использует фреймы, такие как Stripe Elements.

Недавно мы начали использовать Cypress в качестве среды тестирования E2E и полюбили его за простоту и удобство использования. Если вы еще не использовали его, попробуйте!

Хотя Cypress элегантно работает с вашим собственным кодом, это может вызвать затруднения, если вы используете сторонние компоненты в своем веб-приложении. В нашем случае пользователи могут расплачиваться кредитной картой. Для сбора данных о платеже мы используем Stripe Elements, который загружает iframe на наш сайт. Однако Cypress еще не поддерживает iframe. К счастью, mightyiam нашел обходной путь для доступа к фреймам и их содержимому с помощью Cypress.

Настройка

Мы предполагаем, что вы настроили проект Cypress и запустили набор тестов. Структура вашего проекта должна выглядеть как на картинке ниже.

Начнем с расширения файла commands.js.

Добавьте этот код в свой commands.js файл. Теперь вы можете использовать cy.getWithinIframe('a selector') для таргетинга на любой элемент в iframe.

Если вам нужна большая гибкость, вы можете использовать iframeLoaded и getInDocument, как показано слева. Вы можете связать многие команды Cypress после getInDocument.

Ввод в элементы полосы

Теперь мы можем вводить данные кредитной карты. В инструментах разработчика вашего браузера вы можете увидеть структуру iframe, загружаемого Stripe Elements.

Как вы можете видеть в выделенной области, есть ввод, который мы можем выбрать с помощью [name="cardnumber"]. С помощью этой информации мы можем сказать Cypress заполнить номер тестовой кредитной карты 4242 4242 4242 4242, а также другую необходимую информацию. Другие части ввода - это exp-date, cvc и postal.

Интегрируйте код в свой набор тестов и запустите его. Вы должны увидеть Cypress, заполняющий данные о кредите.

Вот и все! Теперь вы можете протестировать весь процесс заказа без каких-либо взломов.

Устранение неполадок

Если вы используете Cypress с Chrome, возможно, вам придется отключить веб-безопасность, добавив "chromeWebSecurity": false в файл cypress.json.

Открытые вопросы

Мы не тестировали, как это работает с несколькими фреймами.