javascript - 赛普拉斯 - 如何从网站注销
问题描述
如果您已登录,赛普拉斯是否有可能从页面注销?或者检查我是否已登录?
我的问题是,如果我在浏览器中运行测试,那么赛普拉斯总是需要登录。但是如果我从 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 有时会有所帮助,但并非总是如此。因此,为了保持测试稳定,我决定创建一个 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
按钮。
推荐阅读
- excel - 如何仅使用 VBA 复制包含值的单元格?
- java - 如何从 JTable 的行中获取值然后将它们分配给数组?
- hyperledger-fabric - Hyperledger Fabric 账本大小如何影响性能?
- python - 如何使用 SQLAlchemy 在 Postgres 中对嵌套日期范围内的值求和
- javascript - Alpha 混合永远不会在 HTML Canvas 中达到不透明颜色
- kotlin - 如何从 TranslatableComponent PaperMC 获取原始字符串
- php - 更改 Woocommerce 结帐端点以显示订单摘要详细信息
- sql - 免费的 SQL Server 索引碎片整理工具
- laravel - 如何在 Laravel 中将 2021-04-10 转换为 2021-04-11 增加日+1
- javascript - 在 React JS 上删除后页面不刷新(需要手动重新加载)