В веб-приложениях взаимодействие с пользователем часто реализуется через модальные окна типа alert, confirm и prompt. Cypress предоставляет гибкие возможности для их перехвата и управления, что позволяет полностью автоматизировать тестирование сценариев с такими окнами.
alert — это простое модальное окно с сообщением и
кнопкой «ОК». В браузере оно блокирует поток выполнения до закрытия
окна. Cypress автоматически перехватывает window:alert,
поэтому прямого взаимодействия с кнопкой «ОК» не требуется.
Пример:
cy.visit('/page-with-alert');
cy.window().then((win) => {
cy.stub(win, 'alert').as('alertStub');
});
cy.get('#trigger-alert').click();
cy.get('@alertStub').should('have.been.calledOnce')
.and('have.been.calledWith', 'Это alert сообщение');
Ключевые моменты:
cy.stub() позволяет заменить оригинальный метод
alert заглушкой, которая сохраняет вызовы для последующей
проверки.have.been.calledWith проверяет точное содержимое
сообщения alert.confirm — это модальное окно с кнопками «ОК» и «Отмена»,
возвращающее true или false в зависимости от
выбора пользователя. Cypress позволяет подменять
результат confirm, управляя логикой теста.
Пример замены поведения confirm:
cy.visit('/page-with-confirm');
cy.window().then((win) => {
cy.stub(win, 'confirm').callsFake((message) => {
expect(message).to.eq('Вы уверены?');
return true; // Эмулируем нажатие "ОК"
}).as('confirmStub');
});
cy.get('#trigger-confirm').click();
cy.get('@confirmStub').should('have.been.calledOnce');
Особенности работы с confirm:
callsFake позволяет возвращать любое значение
(true или false) вместо стандартного
поведения.prompt — это окно с полем для ввода, которое возвращает
текст, введённый пользователем. Cypress поддерживает перехват prompt
через window:prompt и подмену возвращаемого значения.
Пример эмуляции ввода в prompt:
cy.visit('/page-with-prompt');
cy.window().then((win) => {
cy.stub(win, 'prompt').callsFake((message) => {
expect(message).to.eq('Введите ваше имя:');
return 'Иван'; // Эмулируем ввод текста
}).as('promptStub');
});
cy.get('#trigger-prompt').click();
cy.get('@promptStub').should('have.been.calledOnce');
Особенности prompt:
null).cy.onКроме использования cy.stub, Cypress позволяет
реагировать на события глобально через cy.on. Это полезно
для перехвата alert, confirm и prompt без явного доступа к
window.
Пример:
cy.visit('/page-with-alert-confirm-prompt');
cy.on('window:alert', (text) => {
expect(text).to.eq('Это alert сообщение');
});
cy.on('window:confirm', (text) => {
expect(text).to.eq('Вы уверены?');
return true; // Нажатие "ОК"
});
cy.on('window:prompt', (text) => {
expect(text).to.eq('Введите ваше имя:');
return 'Иван';
});
cy.get('#trigger-alert').click();
cy.get('#trigger-confirm').click();
cy.get('#trigger-prompt').click();
Преимущества подхода через cy.on:
window.cy.stub() предпочтительно, когда важно
проверить количество вызовов и параметры.cy.on лучше подходит для глобальной обработки
событий, особенно если несколько элементов на странице могут
вызывать однотипные модальные окна.Эти методы позволяют полноценно управлять alert, confirm и prompt в тестах Cypress, обеспечивая стабильность и повторяемость сценариев, а также точную проверку пользовательских сообщений и поведения приложения.