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

How can we get the multiple elements with one expression like using for loop

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

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

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

我如何在 Cypress 中执行此操作?

也许你想要 .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')
}

在 Cypress 测试中,for-loop 是用 .each()

实现的
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])
  })