Cypress 如何检测数组存在重复元素并让测试步骤断言失败
你遇到的失效问题本质是Cypress命令为异步队列执行,直接在each命令外层同步读取textsArray时,元素遍历还未完成,数组尚未被正确填充,因此校验逻辑无法正常运行。
你可以直接将重复校验逻辑封装到自定义命令中,修改后的代码如下:
Cypress.Commands.add('verifyNoDuplicateTextInList', (list) => { const textsArray = [] cy.xpath(list).each(($el) => { // 替换所有空格,避免多空格场景下的误判 const text = $el.text().replaceAll(' ', '') textsArray.push(text) cy.log('提取到的文本:', text) }).then(() => { // 遍历完成后再执行重复校验 const uniqueSet = new Set(textsArray) // 内置断言,失败时会直接标记测试用例不通过 expect(uniqueSet.size, '校验列表无重复文本').to.eq(textsArray.length) // 可选:如果需要抛出更明确的重复值提示,可以添加以下逻辑 if (uniqueSet.size !== textsArray.length) { const duplicateValues = [...new Set(textsArray.filter((item, idx) => textsArray.indexOf(item) !== idx))] throw new Error(`列表中存在重复文本:${duplicateValues.join('、')}`) } }) })
在测试用例中直接调用即可:
// 传入对应列表的xpath选择器即可 cy.verifyNoDuplicateTextInList('你的xpath选择器')
如果你需要保留单独提取文本数组的逻辑,也可以在提取完成后的then回调中执行上述校验逻辑,效果一致。
内容的提问来源于stack exchange,提问作者Zoran
相关产品推荐
相关产品推荐

