【发布时间】:2021-03-01 19:01:01
【问题描述】:
我有一个自定义命令,我想覆盖 4 秒的默认超时。我尝试在命令的代码和使用它的测试中设置超时,但还没有成功。
Cypress.Commands.add("login", () => {
Auth.signIn(username, password)
.then(() => {
console.log('Programmatically logged in as ' + username);
})
.catch(err => console.log('Error when login in: ', err));
})
我尝试了以下方法:
Cypress.Commands.add("login", { timeout : 10000} () => {...}
和
Cypress.Commands.add("login", () => {
Auth.signIn(username, password)
.then(({ timeout : 10000}) => {
console.log('Programmatically logged in as ' + username);
})
.catch(err => console.log('Error when login in: ', err));
})
编辑/更新
我在 Auth.signIn() 调用中添加了 async/await,这使得执行等待该方法完成,但如果它达到 4 秒默认超时,它会使测试失败。
我能做的最好的就是在login 命令的then 中包含所有测试代码。
it('Test that requires login', () => {
cy.login().then(function (){
cy.visit('/');
//...
});
})
虽然测试会等待登录操作完成,但如果在登录前达到超时,则测试失败。
【问题讨论】:
-
您需要 10 秒的等待时间吗?
-
如果您超时的原因是表单完成工作所需的时间,我建议您在后续页面中定位一个关键元素,您需要测试并等待它是可见的。它不是 100% 的完全证明,但在大多数情况下是一种更好的做法。
-
@ManuelAbascal 不完全正确。登录操作需要 3.5 到 8 秒才能完成,这使得测试不稳定,因为当登录在 4 秒超时之前完成时,它会通过,否则不会
-
@RosenMihaylov 感谢您的建议。诀窍是,在应用程序中,当未登录的用户导航到主页时,它会被重定向到 /login 页面,所以我必须在测试开始之前完成登录过程和命令
cy.visit -
@MauriR,在这种情况下,我会在
cy.visit()之后和测试开始之前使用cy.get('loginFormElement').should('be.visible')
标签: javascript cypress e2e-testing