如何使用一个表达式获得多个元素,例如使用for循环



我们有5个元素,我们需要将所有5个元素的文本与期望的文本相匹配。

假设//div[@class="xyz"]是公共元素选择器,对于第一个元素,我们需要使用(//div[@class="xyz"])[1],以此类推,使用for循环。

for (i=0; i<xyz.length; i++) {
  cy.get('(//div[@class="xyz"])[i]')
}

如何在Cypress中执行此操作?

在Cypress测试中使用.each()

实现for循环
const expectedText = ['a', 'b', 'c', 'd', 'e']
cy.xpath('(//div[@class="xyz"]')
  .each(($el,index) => {
    expect($el.text()).to.eq(expectedText[index])
  })

const expectedText = ['a', 'b', 'c', 'd', 'e']
cy.get('div.xyz')
  .each(($el,index) => {
    expect($el.text()).to.eq(expectedText[index])
  })

也许您想要.eq()命令?

cy.get('(//div[@class="xyz"])').eq(i)

您可以使用forEach循环来遍历文本。在XPath中,可以使用forEach循环中的索引值。比如:

var textArray = ['text1', 'text2', 'text3', 'text4', 'text5']
for (let [index, text] of textArray.entries()) {
  cy.xpath(`//div[@class="xyz"])[${index}]`).should('have.text', text)
}

如果你只有一个文本你想要验证5个元素,你可以使用传统的5次迭代的for循环,比如:

for (let i = 0; i < 5; i++) {
  cy.xpath(`//div[@class="xyz"])[${i}]`).should('have.text', 'some text')
}

最新更新