返回 false 不会破坏 cypress 中的每个循环

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

这是我的代码片段

cy.get('[data-testid="userRecords"]')
  .each((record) => {
    if (record.find('[data-testid="delete"]').is(":enabled")) 
    {
        cy.wrap(record).find('[data-testid="delete"]').click()
        if (someValue == 1) 
        {
            cy.get('[data-testid="test"]').should("be.visible");
        }
        else 
        {
            cy.get('[data-tstid="anotherTest"]').should("be.not.exist")
        }
        return false;
    }

我在这里试图实现的目标是,如果输入外部

if
语句,那么我想打破
each
循环。

有人可以指导我为什么我无法退出

each
循环吗?

javascript cypress cypress-each
1个回答
0
投票

您可以切换到

.is(':not([disabled]'))
以获得更好的结果。

参见 :启用选择器

:enabled
选择器与
:not([disabled])
略有不同。
:enabled
选择其布尔值 disabled 属性严格等于 false

的元素

如果我将其归结为这个测试示例

HTML

<table>
  <tbody>
    <tr data-testid="userRecords">
      <td data-testid="delete"><button>Delete</button></td>
    </tr>
    <tr data-testid="userRecords">
      <td data-testid="delete" disabled><button>Delete</button></td>
    </tr>
    <tr data-testid="userRecords">
      <td data-testid="delete"><button>Delete</button></td>
    </tr>
  </tbody>
</table>

测试

cy.get('[data-testid="userRecords"]').each((record, index) => { 

  Cypress.log({ message: `Processing ${index}` })
  console.log(index, ':enabled', record.find('[data-testid="delete"]').is(":enabled"))
  console.log(index, ':not([disabled]', record.find('[data-testid="delete"]').is(':not([disabled]'))

  if (record.find('[data-testid="delete"]').is(':not([disabled]')) 
  {
    Cypress.log({ message: `Returning on ${index}` })
    return false;
  }
})

我在第二个元素上提前退出,跳过第三个元素。

© www.soinside.com 2019 - 2024. All rights reserved.