【问题标题】:Cypress - how to logout from site赛普拉斯 - 如何从网站注销
【发布时间】:2019-08-19 14:29:20
【问题描述】:

如果您已登录,在赛普拉斯中是否有可能从页面注销?或者检查我是否已登录?

我的问题是,如果我在浏览器中运行测试,那么赛普拉斯总是需要登录。但是如果我从 cmd 启动它,它只需要在第一个测试时登录,但在下一个测试时你已经已登录。

// Visit the site
cy.visit(
  "https://zeteodemo.uat.creasoft.cz/login?ReturnUrl=%2fVehicleInsuranceV2%2fCompare%3fOsobniCislo1%3d1%26ProductsFilter%3dAXA-ONLINE"
);

// Enter username
cy.get(".login__username")
  .type("tester")
  .should("have.value", "tester");

// Enter password
cy.get(".login__password")
  .type("1")
  .should("have.value", "1");

// Click the login button
cy.get(".button-login").click();

【问题讨论】:

  • 我可能完全不在这儿,对你会得到什么答案很感兴趣。但是您是否考虑过使用 cookie (docs.cypress.io/api/cypress-api/cookies.html#Syntax)?赛普拉斯会在每次测试后删除 cookie,但您可以保留登录用户的 cookie,根据其值决定是否需要单击登录按钮。这只是一个想法,以前从未这样做过..
  • 是的,我正在尝试使用 cookie,但它不起作用。也许我没有正确使用它们,所以我在问。

标签: javascript testing automation automated-tests cypress


【解决方案1】:

我已经在多个环境中运行了赛普拉斯测试,其中一个存在登录状态问题。删除 cookie 有时会有所帮助,但并非总是如此。因此,为了保持测试稳定,我决定创建一个 if 语句(这本身并不是最佳实践)以尽快进入已知的应用程序状态。

我所做的是在每个可以使用登录名的beforeEach() 中使用下面的自定义命令:

Cypress.Commands.add('login', function () {
    cy.get('body').then($body => {
        if ($body.find('.user-profile-name').length === 1) {
            cy.log('Already logged in')
        } else {
            cy.get('.login-button').click()
        }
    })
})

检查浏览器是否已经登录,因为.user-profile-name 应该存在。如果不存在浏览器未登录,Cypress 需要点击.login-button 按钮。

【讨论】:

  • 就是这样!非常感谢!
  • 非常感谢,这也解决了我的问题。
猜你喜欢
  • 1970-01-01
  • 2019-01-23
  • 1970-01-01
  • 2021-12-03
  • 2020-12-23
  • 1970-01-01
  • 1970-01-01
  • 2020-08-15
  • 1970-01-01
相关资源
最近更新 更多