赛普拉斯测试:保存Cookie和保持登录会话的有效性
本文逐步解释了如何以一种简单的方式在测试之间保存和共享cookie/会话
默认情况下,Cypress在每次测试前都会重置会话。如果你在第一个测试场景中登录(ex: it() block) ,然后在第二个测试(second it block) ,而你正在执行一些其他任务,你会被自动带回到登录页面。发生这种情况是因为Cypress不保留会话;它创建一个新的会话。在端到端测试中,大多数情况下,用户将首先被登录,然后所有的工作流程都将被检查。这篇文章解释了克服这一问题的最简单方法,只需使用几行代码。
让我解释一下这个场景。
测试案例1:你已经登录到了应用程序。
测试案例2:你将点击菜单来验证一些功能。
如果你使用的是Selenium,上述选项看起来非常简单。 然而,在Cypress中,在执行第一个测试用例(测试用例1)之后,它将重置会话,就像重新启动浏览器一样。 因此,当你到达测试案例2时,你将再次被要求登录并执行测试案例1的所有操作。如果你想在Cypress中解决这个问题,让我们在一个例子中讨论一下后续的步骤。
如果你对特定的cookie不感兴趣,你想要的只是在整个测试中保留活跃的登录会话,你可以遵循下面的步骤。另外,请注意,在下面的步骤中,一旦你登录,共享代码会保留赛普拉斯测试中的所有cookies,并在每个测试中共享cookies,因此你不需要重复登录。
互联网上有许多问题,例如:
- 如何在测试之间不冲刷cookie
- 如何使用Cypress来保存cookie
- 如何在Cypress.io中保留会话
- 如何在Cypress中恢复cookie
- 如何在Cypress.io中停止每次测试后的重新登录
- 如何在下一次测试开始时保留并不清除cookie
- 如何用Cypress.io创建和保存Cookies
- 如何在Cypress的测试之间保存cookie
- 如何在多个测试中保留cookie
以下是最简单、最容易、最通用的方法,考虑到那些刚刚开始使用Cypress的人。 我希望这对某人有帮助。
第1步:导航到位于Cypress/Support文件夹中的index.js
第2步:复制并粘贴以下代码
JavaScript
afterEach(() => {
//Code to Handle the Sesssions in cypress.
//Keep the Session alive when you jump to another test
let str = [];
cy.getCookies().then((cook) => {
cy.log(cook);
for (let l = 0; l < cook.length; l++) {
if (cook.length > 0 && l == 0) {
str[l] = cook[l].name;
Cypress.Cookies.preserveOnce(str[l]);
} else if (cook.length > 1 && l > 1) {
str[l] = cook[l].name;
Cypress.Cookies.preserveOnce(str[l]);
}
}
})
注意。 如果你在使用上述代码后看到一个超时 错误,请按照以下步骤操作:
- 导航到位于根 文件夹中的cypress.json文件。
- 添加一行: "defaultCommandTimeout":30000
请参考这里的示例项目
这就是全部!测试愉快!!!