You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

页面每次重载图片时如何使用cy.each()实现全量图片删除测试?

解决Cypress删除重载页面中所有图片的测试用例问题

问题根源在于你当前的代码一次性获取了所有删除按钮的DOM元素,点击第一个按钮后页面重载,剩余元素已脱离当前DOM树,导致后续点击操作失效。

针对你的场景(每次删除后页面重载,最多显示15张图片),可以用递归查询+删除的方式,每次只处理当前页面存在的删除按钮,确保操作基于最新DOM:

// 定义递归函数删除所有图片
const deleteAllImages = () => {
  // 每次重新查询当前页面的删除按钮
  cy.get('[datacy="deleteImageIconX"]').then($deleteButtons => {
    if ($deleteButtons.length > 0) {
      // 点击第一个删除按钮
      cy.wrap($deleteButtons.first()).click()
      // 等待页面重载完成:替换为你页面中表示加载完成的元素标识
      cy.get('[datacy="imageItem"]').should('exist')
      // 递归调用,继续删除剩余图片
      deleteAllImages()
    }
  })
}

// 执行删除操作
deleteAllImages()

关键说明:

  • 每次操作前重新查询删除按钮,确保基于最新DOM状态,避免操作已失效的元素
  • 点击后等待页面重载完成(比如等待图片列表重新渲染),保证页面状态稳定后再进行下一次删除
  • 递归逻辑会自动终止,直到页面中无剩余删除按钮

你也可以用循环方式实现,适配性稍弱但逻辑直观:

// 先获取初始删除按钮总数,循环执行删除
cy.get('[datacy="deleteImageIconX"]').its('length').then(totalImages => {
  Cypress._.times(totalImages, () => {
    // 每次重新获取第一个删除按钮
    cy.get('[datacy="deleteImageIconX"]').first().click()
    // 等待页面更新,验证页面最多显示15张图片
    cy.get('[datacy="imageItem"]').should('have.length.at.most', 15)
  })
})

这两种方式都能解决页面重载导致的DOM元素失效问题,确保所有图片被成功删除。

内容的提问来源于stack exchange,提问作者Luke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 13:45:32