赛普拉斯 - 迭代具有不同值的相同元素?

Posted

技术标签:

【中文标题】赛普拉斯 - 迭代具有不同值的相同元素?【英文标题】:Cypress - iterating through same elements with different values? 【发布时间】:2021-02-08 23:37:40 【问题描述】:

我有这个 DOM:

div<data-hook='cart-content'>
    <section data-hook="item">  
        <h3 data-hook='product-name'>Winter Feel Package</h3>
    <section data-hook="item">  
        <h3 data-hook='product-name'>Christmas Wreath</h3>

我想验证我的项目名称是否存在于 DOM 中(有一次我将使用第一个值“Winter Feel Package”然后使用“Christmas Wreath”对其进行测试)但是当我使用 'cy. get' 我得到了唯一的第一项。

这是我尝试过的: 首先我尝试了幼稚的方法:

getProductName(itemName)
        cy.get("iframe[title='Cart Page']").its('0.contentDocument')
        .should('exist').its('body')
        .should('not.be.undefined').then(cy.wrap)
        .find("div[data-hook='item-list'] section[data-hook='item'] h3[data-hook='product-name']")
        .then(($elem)=>
            expect($elem).to.have.text(itemName)
        )
    

无论如何它都返回了我的第一个元素。

这是我的第二次尝试,但在这里我得到了一个没有元素的空数组:

getProductName(itemName)
        cy.get("iframe[title='Cart Page']").its('0.contentDocument')
        .should('exist').its('body')
        .should('not.be.undefined').then(cy.wrap)
        .find("div[data-hook='item-list'] section[data-hook='item'] h3[data-hook='product-name']")
        .then(($elem)=>
            let items = $elem.map((i, el)=>
                return Cypress.$(el).get("h3[data-hook='product-name']")
            )
            expect(items.get()).to.contain(itemName)
            // expect($elem).to.have.text(itemName)
        )
    

DOM 非常简单,我正在努力如何去做,如果是 java 我会把它放在 List 中并遍历这个列表,但在这里我真的迷失了自己。

【问题讨论】:

【参考方案1】:

我推荐使用 cypress-iframe 包,因为它是确保 iframe 完全加载的最安全方法,不会在您的测试中造成混乱。

getProductName(itemName) 

  cy.iframe('[title="Cart Page"]')  
    .contains('h3[data-hook="product-name"]', itemName); // gets just the h3 with text

【讨论】:

好的,这不是一个断言,它不会在我的测试中断言文本存在。 @tupacshakur 你错了,.contains() 会断言文本在h3 中存在。您可以通过输入一些不存在的文本来验证。

以上是关于赛普拉斯 - 迭代具有不同值的相同元素?的主要内容,如果未能解决你的问题,请参考以下文章

赛普拉斯 - 4000 毫秒后重试超时:预计会找到元素 - 仅在 Jenkins 中

赛普拉斯:测试元素是不是不存在

赛普拉斯:如何将文本值/文本元素与 .each() 进行比较

赛普拉斯:检查元素是不是存在无异常

如何使用赛普拉斯检查可能不存在的元素

如何让赛普拉斯只处理可见元素?