Cypress中元素不存在/页面无记录时如何跳过测试
现有实现思路评估
你的核心判断方向是可行的,但现有代码存在两个明显缺陷,无法达到预期效果:
- 检测到无数据提示时仅打印了日志,没有真正触发测试跳过逻辑,后续测试步骤仍会执行,甚至会因为找不到操作按钮抛出误报
- 直接全局查找body下的
.ant-empty-description容易被页面其他模块的空状态组件干扰,且没有等待表格加载完成的逻辑,在接口返回慢、页面还处于渲染中间态时,会出现判断错误(比如既没渲染空提示也没渲染表格行时,会误进入点击分支找不到元素报错)
正确实现方案
Cypress原生提供了this.skip()方法用于主动跳过当前测试用例,实现时注意限定元素查找范围、等待页面加载完成即可,参考代码如下:
// 注意:回调函数不要用箭头函数,否则无法获取测试上下文调用this.skip() // 先等待表格容器加载完成,超时时间可根据项目页面实际加载速度调整 cy.get('.ant-table-container', { timeout: 10000 }) .then(function($table) { // 等待表格加载动画消失,避免加载中间态干扰判断 cy.wrap($table).find('.ant-spin-spinning').should('not.exist') // 仅在当前表格范围内查找空状态提示,避免全局查找的误判问题 const hasNoData = $table.find('.ant-empty-description').length > 0 if (hasNoData) { cy.log('页面无数据记录,跳过当前测试') this.skip() } // 有数据时执行点击操作,优先用CSS选择器比xpath定位稳定性更高 cy.get(`.ant-table-tbody tr:nth-child(${rowNumber}) td:nth-child(4) button em`) .should('be.visible') .click() })
优化注意事项
- 不要全局查找body下的元素,将查找范围限定在当前操作的表格容器内,可避免页面其他位置的同名class元素干扰判断
- 必须等待列表加载完成(包括接口返回、loading动画消失)后再做存在性判断,否则很容易在页面渲染的中间状态拿到错误的判断结果
- 调用
this.skip()时禁止使用箭头函数定义回调,箭头函数绑定的外层this无法拿到Cypress测试运行上下文,会导致跳过方法执行失败 - 若项目中表格行的操作按钮有固定的专属class,建议替换现有按列数定位的写法,后续表格列顺序调整时不需要维护测试代码
内容的提问来源于stack exchange,提问作者Bhawin Joshi
相关产品推荐
相关产品推荐

