Cypress等待保存弹窗消失时测试提示‘expected undefined’问题排查
问题解答
疑问1:为何提示中是undefined而非“Saving”?
当cy.contains('Saving')执行时,如果DOM里已经没有这个元素,Cypress会把该命令的返回值设为undefined。后续执行.should('not.exist')时,断言的对象就是这个undefined,所以报错信息里会显示expected undefined not to exist,而非目标文本“Saving”。
疑问2:是否是cy.wait(2000)导致弹窗提前消失,Cypress未捕获到?
是的,硬编码的cy.wait(2000)是固定等待时长,但弹窗的显示时长可能远短于2秒。等待结束后弹窗已经从DOM中移除,此时cy.contains('Saving')根本找不到目标元素,才会出现上述undefined的报错。
优化后的代码
不要用硬等待,而是先确保弹窗出现,再等待它消失,利用Cypress的自动重试机制保证流程可靠性:
// 点击Save按钮(无需trigger,click会自动处理可见且未禁用的元素) cy.contains('button:visible','Save').should('not.be.disabled').click(); // 先等待弹窗出现,确认加载状态触发 cy.contains('Saving').should('be.visible'); // 再等待弹窗消失,确认保存完成 cy.contains('Saving').should('not.exist');
内容的提问来源于stack exchange,提问作者Darksymphony
相关产品推荐
相关产品推荐

