我正在使用 cypress 对 react 应用程序进行一些 e2e 测试,但在单击元素时遇到问题。
我有这个简单的脚本:
it('can bookmark/unbookmark the posting', () => {
cy.visit(pdfPosting.url)
.wait(1000)
.contains('Save')
.should('be.visible')
.click();
cy.visit('/jobs/jobbox')
.contains(pdfPosting.title)
.should('be.visible');
cy.visit(pdfPosting.url)
.wait(1000)
.contains('Saved')
.should('be.visible')
.click();
cy.visit('/jobs/jobbox')
.findByText(pdfPosting.title)
.should('not.exist');
}
});
我的问题开始是因为Save
和Saved
按钮位于页面加载时由于未知原因刷新多次的反应组件内。测试失败,因为有时组件会在按钮上的contains
和之间刷新。click
现在解决这个问题的唯一方法是添加你在测试中看到的等待,但我真的很讨厌这个 hack。
我尝试做的第一件事是捕获错误并重试该contains.should.click
块,但赛普拉斯不允许这样做(https://docs.cypress.io/guides/core-concepts/conditional-testing.html#Error-Recovery)和最糟糕的是本文提出的解决方法对我不起作用(或者我不知道该怎么做)
我还尝试处理事件(https://docs.cypress.io/api/events/catalog-of-events.html#Uncaught-Exceptions),但我找不到任何可以用来重试的事件代码并继续执行测试。
我试图与开发人员交谈,如果他们能解决刷新问题,但简短的故事是他们不会。最终用户没有意识到组件上的这种刷新,并且没有预算来调查问题。
此外,我正在与开发人员讨论我们是否可以在某处添加一些东西,以表明组件的加载已经完成,但是,这似乎是不可能的。他们不能不承认组件的加载已经完成,因为他们不知道这些刷新来自哪里。
你知道我如何使用 cypress 来处理这种情况吗?