Я новичок в Cypress, и у меня есть проблема.
В приложении у меня есть кнопка "Сохранить". При нажатии на кнопку срабатывает JS window.prompt(). Внутри подсказки вы пишете имя сохранения (например, «Сохранить от Джона») и нажимаете «ОК» — внутри подсказки.
Мне нужно охватить эту пользовательскую историю тестом E2E в Cypress.io.
Проблема в том, что когда я нажимаю кнопку «Сохранить», кипарис зависает в событии Click(), когда отображается приглашение.
it('Make a new save with JS prompt', () => {
cy.get('#save-changes-button')
.should('be.visible')
.click() //here the prompt is displayed, cypress stop and wait for click() event finish
})
Могу я попросить помощи? Я не нашел подходящего решения в документах Cypress.io или где-либо еще.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Хорошо, факт в том, что текущая версия Cypress.io не поддерживает взаимодействие с событиями window. Способ, как обмануть это метод cy.stub().
Это мое решение. Сценарий:
window.prompt() открыт.И код в Cypress:
it('Save the value inside Prompt', () => {
cy.window().then(win => {
cy.stub(win, 'prompt').returns('The value you write inside prompt')
cy.get('#save-changes-in-gui-button').click();
//... Saved value assert
})
})
Cypress по умолчанию изменяет событие window.pompt() на заглушку и имитирует нажатие «ОК». Это решение работает для меня сейчас. Надеюсь, это может помочь кому-то еще :)
Сторона HTML:
<button id = "createDirectory" (click) = "createDirectory()">Create</button>
Функция createDirectory() запрашивает имя каталога
Сторона JAVASCRIPT:
createDirectory() {
const x = prompt('Enter directory name');
console.info(x);
}
Как добиться этого в кипарисе?
it('Creating new directory level 1', () => {
cy.window().then(win => {
/* In case of writing something in prompt, use stub and then click on button on which prompt opens */
cy.stub(win, 'prompt').returns('level1');
cy.get('button#createDirectory').click();
});
});