我在屏幕右上方有一个购物车预览按钮. 如果我点击这个按钮,就会出现一个div.这个div列出购物车中的物品,每个物品下面都有一个"Remove"按钮.

我需要点击每个"删除"按钮的这个div,并删除所有的项目逐一.

问题是,在我点击"删除"之后,一个微调按钮出现了几秒钟.当微调按钮消失时,会显示其余的项和其余的"移除"按钮.

  cy.get('.cart-toggle-btn').click()
  cy.contains('.remove.btn', 'Remove').each(aaa => {
    aaa.click()
  })

如果我使用上面的代码,它只删除第一项,然后测试通过.但购物车里还有其他东西.

我如何"告诉"Cypress 等待Redux调度操作完成(微调按钮消失),然后重试查找下一个删除按钮?

谢谢

推荐答案

微调控制项中的因式分解是查看"内部"过程何时完成的好方法,您可以继续执行下一个删除操作.

但你应该等待旋转器出现,然后消失.在测试中,Cypress 会非常迅速地判断旋转器,甚至在它出现之前.

cy.get('.cart-toggle-btn').click()
cy.contains('.remove.btn', 'Remove').each($item => {
  cy.wrap($item).click()
  cy.get('spinner').should('be.visible')       // check visible rather than exists
  cy.get('spinner').should('not.be.visible')
})

使用列表计数器

如果你的旋转器有问题(并不在意),判断列表的长度

如果在删除操作之间重新呈现列表,并且得到detached from DOM个错误,请重新查询循环中的元素

cy.contains('.remove.btn', 'Remove').each($item => {

  // get fresh count each time
  cy.contains('.remove.btn', 'Remove').then($currentList => {  

    const count = $currentList.length   

    cy.contains('.remove.btn', 'Remove').first().click()    // remove one 

    // wait for smaller list (when it's not yet empty)
    if (count > 1) {
      cy.contains('.remove.btn', 'Remove').should('have.length', count -1)
    } else
      cy.contains('.remove.btn', 'Remove').should('not.exist')
    }
  })
})


使用传统的Java脚本for-loop

这是较短的,使用常规循环并在循环外执行最后一个删除操作.

cy.get('.remove.btn').its('length').then(count => {

  for (let index = 1; index < count; index++) {
    cy.get('.remove.btn').first().click()
    cy.get('.remove.btn').should('have.length', count -index)
  }
  cy.get('.remove.btn').first().click()
  cy.get('.remove.btn').should('not.exist')
})

Reactjs相关问答推荐

当我在React中使用类方法更新模型的状态时,它在严格模式下触发两次

未定义发送的数据无法在reactjs中找到原因

如何在React组件中自动更新图表数据?

Material-UI 和 React Hook 表单不记录值

找不到名称setCometChat

cypress `cy.now()` Type 'Promise' 没有调用签名

无法访问 usefocusEffect 中 const 的更新状态

如何使用 React 更改 Material UI 中 ButtonGroup 的 colored颜色 ?

如何在不重新加载页面的情况下加载新添加的数据?

顶点图表甜甜圈项目边框半径

单元测试 useLoaderData() react-router v6 加载器函数

如何禁用来自 React Native API 的某些特定项目的可touch 不透明度

如何制作基于对象 struct 呈现数据的可重用组件?

Cypress - 在继续之前等待下一个按钮重新出现

如果 URL 已随功能组件更改,则取消刷新

哪个 PrivateRouter 实现更好:高阶组件还是替换?

React useEffect hooks return () => cleanup() vs return cleanup

CORS 政策:无访问控制允许来源-AWS 和 Vercel

react 路由:router.ts:11 没有匹配的路由位置/管理

Cypress 中的 process.env 空对象