Javascript Cypress:如何处理从iframe触发的窗口确认关闭

Javascript Cypress:如何处理从iframe触发的窗口确认关闭,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($w

我需要关于如何关闭由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!')
        })
    }) 

触发此窗口的按钮如上图所示:

希望有人能看一看并提供帮助。

使用可以在开始测试其内容之前对iframe加载是否已完成进行更多检查

缺点是这个库的方法产生
body
,但不产生iframe窗口,尽管我认为您可以使用
body.ownerDocument.window
来获得它

cy.enter('iframe[id=“ParentMainContent\u Frame”]”)。然后(getBody=>{
const body=getBody();
const win=body.ownerDocument.window;
cy.spy(win,'confirm').as('windowConfirm');//spy不是存根
body.find(“#ParentMainContent_MainContentMaster_ctl00_PlaceOrderButton”)
。单击()
.should(函数(){
expect(this.windowConfirm).to.be.calledWith('谢谢您的订单!')
})
}) 
}) 
使用可以在开始测试iframe内容之前,对iframe加载是否已完成进行更多检查

缺点是这个库的方法产生
body
,但不产生iframe窗口,尽管我认为您可以使用
body.ownerDocument.window
来获得它

cy.enter('iframe[id=“ParentMainContent\u Frame”]”)。然后(getBody=>{
const body=getBody();
const win=body.ownerDocument.window;
cy.spy(win,'confirm').as('windowConfirm');//spy不是存根
body.find(“#ParentMainContent_MainContentMaster_ctl00_PlaceOrderButton”)
。单击()
.should(函数(){
expect(this.windowConfirm).to.be.calledWith('谢谢您的订单!')
})
}) 
}) 

如果帧处理很棘手,我建议使用。但是可能尝试
cy.spy()
而不是
cy.stub()
,因为spy允许原始行为,但stub阻止原始行为。嗨@eric99,我尝试了cy.spy,但仍然无法单击conf窗口。您是否有一个关于如何做到这一点的工作示例?处理iFrame最简单的方法是使用。代码中可能缺少的是等待加载iframe,例如
Cypress.$(contentWindow)。on('load',resolve)
是如何在此库中完成的。iframe处理很棘手,我建议使用。但是可能尝试
cy.spy()
而不是
cy.stub()
,因为spy允许原始行为,但stub阻止原始行为。嗨@eric99,我尝试了cy.spy,但仍然无法单击conf窗口。您是否有一个关于如何做到这一点的工作示例?处理iFrame最简单的方法是使用。您的代码中可能缺少的是等待加载iframe,例如
Cypress.$(contentWindow)。在('load',resolve)
上,这是在这个库中如何完成的。您好@eric99,我尝试了这个,但是我得到了一个关于窗口“未定义”的错误:您好@eric99,我尝试了这个,但是我得到了一个关于窗口“未定义”的错误: