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

是否有更优方案验证网格子元素的文本均不重复?

更优雅的Cypress验证网格子元素文本唯一性方案

你当前的代码仅验证了相邻子元素的文本不重复,存在漏检非相邻重复内容的风险,而且可以用更简洁严谨的方式实现所有子元素文本完全唯一的验证,推荐两种优化方案:

方案一:利用Set去重特性验证长度

通过提取所有文本到数组,结合Set自动去重的特性,比较原数组和Set的长度是否一致:

it('features', () => {
  home.featuresMainTitle("What you'll learn")
  cy.get('.grid').children().find('h3')
    .then($headings => {
      // 提取所有h3的文本并去除前后空格
      const allTexts = Array.from($headings).map(heading => heading.textContent.trim())
      // 原数组长度和Set长度相等则说明无重复
      expect(allTexts).to.have.lengthOf(new Set(allTexts).size)
    })
})

方案二:使用Cypress should()链式断言(推荐)

用should()包裹验证逻辑,Cypress会自动处理DOM元素的重试机制,确保元素加载稳定后再执行验证,更符合Cypress的最佳实践:

it('features', () => {
  home.featuresMainTitle("What you'll learn")
  cy.get('.grid').children().find('h3')
    .should($headings => {
      const allTexts = Array.from($headings).map(el => el.textContent.trim())
      const uniqueTexts = new Set(allTexts)
      // 断言原数组去重后和原数组完全一致
      expect(allTexts).to.deep.equal([...uniqueTexts])
    })
})

优化点说明

  1. 覆盖所有元素的唯一性验证,不会漏掉非相邻的重复文本
  2. 代码更简洁,无需手动遍历比较相邻元素
  3. 方案二的should()会自动重试,适配DOM可能的异步更新场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 06:32:10