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

Cypress技术求助:列表项删除前后数量校验实现问题

正确实现Cypress列表项移除后的计数校验逻辑

原代码的核心问题是没有处理Cypress的异步特性——直接将Counter()赋值给变量得到的是Cypress的链式操作对象,而非实际的数字值,导致后续比较逻辑失效。以下是修正后的实现方案:

1. 修正计数获取函数

先调整Counter静态方法,确保它返回可被异步获取的数值:

static Counter() {
  return cy.get('.page-number > span')
    .invoke('text')
    .then(text => {
      // 提取文本末尾的数字部分,注意指定parseInt的基数为10
      const numStr = text.match(/([\d\.]*)$/gmi)[0];
      return parseInt(numStr, 10);
    })
    .should('be.a', 'number'); // 可选校验,确保结果是数字
}

2. 测试用例的正确写法

利用Cypress的.then()回调传递异步值,按顺序执行「获取初始计数→执行删除→获取新计数→校验差值」的流程:

describe('Compare totals before/after performing web actions', () => {
  it('Verify list item removal by count change', () => {
    // 获取初始计数,通过then拿到实际数值
    YourClassName.Counter().then(beforeCount => {
      // 执行移除列表项的操作(示例:点击第一个列表项的删除按钮)
      cy.get('.list-item').first().find('.delete-btn').click();
      
      // 可选:等待页面更新完成(比如等待加载状态消失、DOM重新渲染)
      cy.get('.loading-spinner').should('not.exist');
      
      // 获取删除后的计数,再次通过then拿到数值并比较
      YourClassName.Counter().then(afterCount => {
        expect(afterCount).to.equal(beforeCount - 1);
      });
    });
  });
});

关键注意事项

  • 异步处理:Cypress所有DOM操作、数据获取都是异步的,必须通过.then()回调获取实际结果,不能直接同步赋值。
  • 基数指定:parseInt要加第二个参数10,避免数字以0开头时被解析为八进制。
  • 页面等待:删除操作后建议添加等待逻辑(如等待加载元素消失、等待计数元素更新),确保DOM已完成更新再获取新计数,避免拿到旧值导致校验失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 04:27:30