iframe - 如何接受带有赛普拉斯的 iframe 触发的窗口确认
问题描述
当我需要接受从 iframe 触发的窗口确认弹出窗口时,我遇到了赛普拉斯的一些问题。赛普拉斯它对 iframe 不是很友好,但我设法让它工作,直到我发现需要。
所以这是我尝试过的(基于this):
cy.get("[title='Some title']").then(($iframe) => {
const $body = $iframe.contents().find("body");
const $win = $iframe[0].contentWindow;
cy.stub($win, "confirm").as("windowConfirm");
cy.wrap($body)
.contains("Delete")
.click() // this fires the confirm popup
.should(function () {
expect(this.windowConfirm).to.be.calledWith(
`Continue deletion?`
);
});
});
它实际上断言弹出窗口内的文本,但从不接受它。我尝试了我发现的不同方法(即使用a.on("window:confirm", () => true)
但我没有得到任何结果。
谢谢!
解决方案
只需将您的真实功能添加到存根
cy.stub($win, 'confirm', () => true)
.as('windowConfirm')
打印CONFIRMED
到控制台。
it('confirms in iframe', () => {
cy.visit('../app/iframe-confirm-popup.html')
cy.get('iframe').then(($iframe) => {
const $body = $iframe.contents().find('body')
const $win = $iframe[0].contentWindow
cy.stub($win, 'confirm', () => true)
.as('windowConfirm')
cy.stub($win.console, 'log').as('consoleLog')
cy.wrap($body)
.find('input').click().should(function () {
expect(this.windowConfirm).to.be.calledWith('Are you sure you want to submit your application?')
expect(this.consoleLog).to.be.calledWith('CONFIRMED') // passes
})
})
})
推荐阅读
- c++ - 我必须在数组末尾移动负元素,在某些情况下,如下面提供的,我得到的是垃圾谷而不是负元素
- regex - 如何提取短语(xvth)后的数字并将短语替换为“Group-”?
- css - 调整浏览器大小时如何调用useEffect
- typescript - 我们可以从函数的参数中推断出泛型类型参数吗?
- azure - 如何使用 Azure IoT Hub 直接方法强制关闭与设备的连接?
- powershell - Powershell命令使用变量里面的变量?
- c# - TakeWhile,但我也想要输入序列的其余部分
- java - 在资源/META-INF/resources 下无法访问 JAR 中的 JSP
- python-3.x - 替换 h5py 文件中的组不断增加大小
- swift - 带有 NavigationLink 的 Swift onTapGesture