我用赛普拉斯编写了以下测试。我在前端使用带有SSR支持的VueJS。 我的应用程序是SPA,我正在测试用户是否单击菜单。
before(() => {
// mock data etc.
});
it('should check if component render properly without ssr', () => {
cy.visit('url');
cy.wait(1000);
cy.get('.menuElement').click();
cy.get('.something').should($something => {
expect($something).to.have.length(10);
});
});
根据赛普拉斯的最佳做法,我不应该以这种形式使用cy.wait。 但是问题是;没有等待,测试将失败。我尝试使用:
{ timeout: 10000 }
作为cy.get和cy.visit中的参数.should('be.visible');
的内容(等待何时可见)cy.wait("@abc")
添加了路线但是以上这些都不适合我。
请提出解决方案。我该怎么办才能确保一切正常?
答案 0 :(得分:0)
除了显示cy.wait()的代码外,您没有显示不起作用的代码。您在cypress.json
文件中配置的defaultTimeout是什么。而且您的页面需要多长时间才能加载...
默认情况下,Cypress对任何cypress命令花费4秒钟,并且如果DOM上不存在元素或未加载页面,它将超时。因此,您可以增加pageLoadTimeout
,以便cypress会等待页面完全加载直到10秒,如果页面在2秒内加载,则立即执行cy.get()
命令
{
"defalutTimeout": 5000,
"pageLoadTimeout": 10000
}
注意:我以前经常使用cy.wait(),在开始有效使用超时后,对我来说就没有问题了。请阅读cypress配置文档
答案 1 :(得分:-1)
一年后,但也许这对有类似问题的人有用。
根据这篇非常有用的文章 - https://www.cypress.io/blog/2020/07/22/do-not-get-too-detached,要实现所需的等待,您应该允许应用程序在继续之前完成最先出现的操作。
我的猜测是,在您的情况下, .menuElement 仍未安装在 DOM 中。而不是使用wait(),你可以做这样的事情:
cy.get('.menuElement').should('not.exist');
cy.get('.menuElement').click();