javascript - Cypress:为自定义命令设置超时

标签 javascript cypress e2e-testing

我有一个自定义命令,我想覆盖 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('/');
        //...
    });
})

虽然测试会等待登录操作完成,但如果在登录之前达到超时,则测试会失败。

最佳答案

我不确定 Cypress 的 custom commands 中的超时 ,但您可以通过传递 default param 来使用解决方法进入您的自定义命令,如下所示:

Cypress.Commands.add("login", (waitTimer = 1000) => {
  Auth.signIn(username, password)
    .then(() => {
        cy.wait(waitTimer);
        console.log('Programmatically logged in as ' + username);
    })
    .catch(err => console.log('Error when login in: ', err));
})

注意:请注意传递超时或任意等待x is not considered good practice 。您应该检查响应的状态并断言它返回200状态或使用 route aliases .

示例:

......
.then(response => {
    if (response.status !== 200) {
      cy.log('An error happened while logging in');
    }

关于javascript - Cypress:为自定义命令设置超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64894285/

相关文章:

javascript - 正则表达式匹配字符串直到空格 Javascript

automated-tests - 如何在 Cypress.io 中创建类似于 Selenium 扩展元素的可重用元素?

javascript - 页面模型导入

typescript - TestCafe - 检查超链接是否有效 - 重定向到外部电子邮件提供商

protractor - 当场景失败时停止 cucumberJs - protractor 和 cucumberjs

javascript - jQuery 通过无序列表制作动画

javascript - Foreach 循环不显示@Html.DisplayFor 中元素之间的空格

javascript - NightmareJS .click() 方法 - 选择器问题

internet-explorer - 我们如何为 IE 和 Edge 设置 Cypress?

automation - 我如何等待一个元素在 Cypress 中消失?