#javascript #iframe #cypress
#javascript #iframe #cypress
Вопрос:
Мне нужна помощь в том, как закрыть окно подтверждения, которое было запущено из iframe. Я пробую приведенный ниже код, но это все равно не может закрыть окно подтверждения.
cy.get('iframe[id="ParentMainContent_Frame"]').then(($iframe) => {
const $body = $iframe.contents().find('body')
const $win = $iframe[0].contentWindow
cy.stub($win,'confirm').as('windowConfirm')
cy.wrap($body)
.find('#ParentMainContent_MainContentMaster_ctl00_PlaceOrderButton').click().should(function () {
expect(this.windowConfirm).to.be.calledWith('Thank you for your Order!')
})
})
Кнопка, запускающая это окно, показана выше:
Надеюсь, кто-нибудь может взглянуть и помочь.
Комментарии:
1. Обработка iFrame сложна, я рекомендую использовать cypress-iframe . Но, возможно, попробуйте
cy.spy()
вместоcy.stub()
этого, поскольку spy допускает исходное поведение, но stub блокирует исходное поведение.2. Привет @eric99, я пробовал cy.spy, но я все еще не могу щелкнуть окно conf. У вас есть рабочий пример того, как это сделать?
3. Самый простой способ обработки iframes — использовать Cypress iframe . Чего может не хватать в вашем коде, так это ожидания загрузки iframe, например
Cypress.$(contentWindow).on('load', resolve)
, как это делается в этой библиотеке.
Ответ №1:
Использование cypress-iframe дает вам больше проверок завершения загрузки iframe, прежде чем вы начнете проверять его содержимое.
Недостатком является то, что методы этой библиотеки выдают body
, но не окно iframe, хотя я думаю, что вы можете использовать body.ownerDocument.window
его для его получения.
cy.enter('iframe[id="ParentMainContent_Frame"]').then(getBody => {
const body = getBody();
const win = body.ownerDocument.window;
cy.spy(win,'confirm').as('windowConfirm'); // spy not stub
body.find('#ParentMainContent_MainContentMaster_ctl00_PlaceOrderButton')
.click()
.should(function () {
expect(this.windowConfirm).to.be.calledWith('Thank you for your Order!')
})
})
})
Комментарии:
1. Привет @eric99, я попробовал это, но я получаю сообщение об ошибке «окно не определено»: