Cypress 13.15.1无头测试本该失败却通过,求排查帮助
问题分析与解决办法
核心原因:错误使用async关键字
你的测试用例中添加了async修饰符,但Cypress的命令系统基于自身异步队列机制实现,完全不需要手动使用async/await。当给it函数加上async后,Node.js会将其视为普通异步函数,在函数执行完毕(此时Cypress的命令队列可能还未启动或完成)时就直接标记测试通过,完全忽略了后续cy.get命令的执行结果。
解决步骤
移除
async关键字
修改测试代码,去掉it.only后的async关键字:describe('Website Landing', () => { it.only('Should load', () => { cy.visit('http://www.mywebsite.com/'); cy.get('[data-testid="sign-inx"]').should('have.length', 1); }) })验证测试行为
重新执行cypress run,此时Cypress会正常等待命令队列执行完毕,当页面不存在目标元素时,测试会按照预期失败。
额外排查点
如果移除async后问题仍存在,可以检查以下内容:
- 通过
cypress open启动有头模式,确认页面确实不存在data-testid="sign-inx"元素 - 检查Cypress配置文件中的
defaultCommandTimeout参数,确保超时时间足够覆盖页面加载(默认4000ms,可根据页面情况调整) - 查看测试运行日志,确认
cy.visit是否成功加载目标页面,是否存在重定向等异常情况
内容的提问来源于stack exchange,提问作者Victor Ferreira
相关产品推荐
相关产品推荐

