Cypress如何在断言失败后继续执行循环并记录错误
解决Cypress断言失败后测试终止的问题
核心问题在于Cypress的should断言是内置的命令级断言,一旦失败就会触发测试终止,普通的catch无法拦截这个错误。要实现"记录错误后继续执行"的需求,你需要替换should断言为手动文本检查,自己控制错误逻辑。
修改后的代码
cy.get('body').then(($body) => { if ($body.find('.MuiTableRow-root.MuiTableRow-hover .MuiTableCell-body').length > 0) { globalActions.getTableRow().then((element) => { if (element.is(':visible')) { globalActions.checkProgressBarDoesntExist().then(() => { cy.get('table[data-testid="table-items"] tbody tr').each(($row) => { cy.wrap($row).find('.type').invoke('text').then((stageText) => { if (stageText.includes('Testing')) { cy.wrap($row).click(); ItemsValues.forEach((field) => { // 核心改动:手动获取文本并判断,不用should断言 itemsActions.getValue(field) .invoke('text') .then((fieldText) => { if (fieldText.includes('--')) { cy.task('log', `空字段错误:字段${field}的值为"${fieldText}"`); // 可选:收集错误,最后统一断言是否有错误 // cy.wrap(errorList).invoke('push', `字段${field}为空`); } }); }); } }); }); }); } }); } });
关键改动说明
- 移除
should('not.contain', '--'),改用invoke('text')获取字段文本后手动判断 - 当检测到
--时,仅用cy.task('log')记录错误,不触发Cypress的断言失败机制 - 这种方式不会中断测试流程,能继续处理后续的列表条目
如果需要最终统一校验是否存在错误,可以在循环结束后断言错误列表是否为空:
// 先在代码开头定义错误收集数组 const errorList = []; // 在判断空字段时添加错误到数组 if (fieldText.includes('--')) { const errorMsg = `字段${field}的值为"${fieldText}"`; cy.task('log', `空字段错误:${errorMsg}`); errorList.push(errorMsg); } // 所有条目处理完后,断言是否有错误 cy.wrap(errorList).should('be.empty', `存在空字段错误:${errorList.join('; ')}`);
内容的提问来源于stack exchange,提问作者Natalia Orzeł
相关产品推荐
相关产品推荐

