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

Cypress如何比对从表格读取的数值与文本拼接的混合类型数据

问题原因及解决方案

核心问题根源

  • HTML中的空格是 (非间断空格,Unicode U+00A0),和手动输入的普通半角空格(Unicode U+0020)编码不同,肉眼显示一致但实际字符串不相等。
  • 你写的正则/[^a-zA-Z0-9 ]/g仅能过滤普通空格,无法匹配 ,因此替换后仍残留差异字符。
  • 部分断言存在类型/用法错误:比如将parseFloat返回的数字类型直接和字符串做严格相等比对、用have.text断言纯字符串(该断言仅适用于DOM元素)。

可用解决方案

场景1:仅需要校验数值是否正确(推荐)

直接从文本中提取数字部分做数值比对,完全避开特殊字符、空格的干扰:

cy.get('[data-cy="projectList"]')
  .find('[data-cy="project.chanceOrder"]')
  .eq(0) // 直接取第一个匹配元素,无需遍历
  .invoke('text')
  .then(rawText => {
    // 提取文本中所有数字和小数点,转成浮点数
    const actualChance = parseFloat(rawText.match(/[\d.]+/)[0])
    // 直接做数值比对
    expect(actualChance).to.equal(project.chanceOrder)
  })

场景2:需要校验完整文本内容

先统一处理所有类型的空白字符,再做比对:

cy.get('[data-cy="projectList"]')
  .find('[data-cy="project.chanceOrder"]')
  .eq(0)
  .invoke('text')
  .then(rawText => {
    // 把所有空白符(含 、换行、tab等)替换为单个普通空格,再去掉首尾空格
    const processedText = rawText.replace(/\s+/g, ' ').trim()
    const expectedText = `${project.chanceOrder} % edit`
    expect(processedText).to.equal(expectedText)
  })

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 10:36:08