如何在Cypress结合axe的508合规扫描中判断无违规并输出提示?
如何在Cypress结合axe的508合规扫描中判断无违规并输出提示?
我之前做Cypress+axe的合规扫描时也碰到过这个问题,cy.checkA11y确实不会直接返回扫描结果,但有两种很实用的方法能实现你要的功能:
方案一:用底层的cy.axeRun直接获取扫描结果
cy.checkA11y其实是对cy.axeRun的上层封装,如果你直接调用更底层的cy.axeRun,就能拿到完整的axe扫描结果对象——里面包含了违规项、通过项等所有细节,判断无违规就变得非常直观:
cy.axeRun('#wrapper', TTv5Conf).then((results) => { if (results.violations.length === 0) { // 用cy.log在Cypress测试日志里输出提示,也可以换成console.log输出到控制台 cy.log('✅ 508合规扫描通过!未检测到任何违规项'); } else { // 调用你原来的自定义错误展示函数 cy.displayError(results.violations); } });
这种方式的好处是灵活性高,除了判断无违规,你还能基于返回的结果做更多自定义处理,比如统计通过项数量、生成更详细的扫描报告等。
方案二:给现有cy.checkA11y加状态标记
如果不想大幅改动现有代码,想继续用cy.checkA11y,可以设置一个简单的状态变量来标记是否存在违规,扫描完成后再检查这个变量:
// 初始化标记为「无违规」状态 let hasViolations = false; cy.checkA11y('#wrapper', TTv5Conf, (violations) => { // 只要进入这个回调,说明存在违规,把标记设为true hasViolations = true; cy.displayError(violations); }, true).then(() => { // 扫描完成后检查标记,若仍为false则输出通过提示 if (!hasViolations) { cy.log('✅ 所有内容符合508合规要求,无违规!'); } });
这里要注意你代码里的第四个参数true——它是skipFailures配置,意思是即使有违规,测试也不会直接失败,这样后续的.then()才能保证执行。如果删掉这个参数,一旦检测到违规,cy.checkA11y会直接让测试失败,后续的提示逻辑就不会运行了。
备注:内容来源于stack exchange,提问作者Keith Fosberg
相关产品推荐
相关产品推荐

