我如何通过赛普拉斯获取 iframe 中的元素

How can i get element inside iframe by cypress

我是新手,正在测试 google 主页上的 GoogleApps 下拉菜单。我需要一个一个地获取这个菜单中的一个元素并断言它。所以我在 'commands.js':

中添加了新命令
Cypress.Commands.add('IframeServiceGet', (iframe) => {
    return cy
        .get(iframe)
        .its('0.contentDocument.body')
        .should('be.visible')
        .then(cy.wrap)        
})

现在我想获取像“地图”这样的元素

it('Click on "Maps', () => {
      cy.IframeServiceGet('iframe').get('#yDmH0d > c-wiz > div > div > c-wiz > div > div > ul.LVal7b.u4RcUd > li:nth-child(3)').should('have.text', 'Maps').click()
      cy.url().should('include', '/maps')
    })

而且它没有获取元素“地图”。那我哪里不好了?

我尝试了一种不同的方法。 首先我安装了这个:npm install cypress-iframe 然后写了下面的代码(注意上面的 referencesimport,我想你也可以在一个新文件中添加 jsconfig.json 如果您不希望在每一页上都导入这些引用,则在根文件夹中作为一个定时器)。 这对我有用。

/// <reference types="Cypress-xpath" />
/// <reference types = "Cypress-iframe"/>
import 'cypress-iframe'

describe('GoogleTest', () => {
    it("Hits google", () =>{
        cy.visit("https://www.google.com")
        cy.get("a[aria-label='Google apps']").click()
        cy.frameLoaded("iframe[role='presentation']")
        cy.iframe().xpath("//span[text()='Maps']").click()
    })
})