Cypress如何处理一个iframe到另一个iframe中

问题描述 投票:0回答:1

主要目标是访问输入字段并提交一些数据。 问题 - 这些元素位于一个 iframe 中(我们不能添加任何属性,如 id 等),它被包装到另一个 iframe 中(我能够通过 id 访问它)。 可以使用

 cy.frameLoaded('#3ds-iframe');
访问顶部 iframe 无法使用
cy.frameLoaded('#cko-3ds2-iframe');
cy.frameLoaded('[name="cko-3ds2-iframe"]')
访问下部 iframe DOM elements screenshot

提前致谢

javascript cypress cypress-iframe
1个回答
2
投票

这是我发现的一种适用于嵌套 iframe 的方法,至少适用于非常简单的 HTML。

  • 使用

    .enter()
    (属于
    cypress-iframe
    包的一部分),移动到第一个 iframe 内。

  • 使用同一包中的

    getBody()
    助手,定位第二个 iframe。

  • 使用传统的 Cypress 命令(来自在 Cypress 中使用 iframe)来提取嵌套 iframe 的主体。

  • 使用 Cypress 命令

    .within()

     将下一个命令集中在第二个 iframe 内。

cy.enter('#iframe1').then(getBody => { getBody().find('#iframe2') .its('0.contentDocument') .its('body').within(() => { // working inside nested iframe cy.get('div').should('contain', 'Inside iframe2') }) })
如果第二个 iframe 的加载时间比外部 iframe 的加载时间长,则可能需要额外的步骤。 

cypress-iframe

命令仅检查外帧的内容,但希望内帧在该时间段内也准备就绪。


这是我测试过的HTML

<iframe id="iframe1" width="300" height="200" src="./iframe2.html"> #document <html> <head></head> <body> <iframe id="iframe2" width="300" height="200" src="./iframe-content.html"> #document <html> <head></head> <body> <div>Inside iframe2</div> </body> </html> </iframe> </body> </html> </iframe>
    
© www.soinside.com 2019 - 2024. All rights reserved.