Cypress 浏览器状态保持登录状态。如何阻止这种情况发生?

rad*_*n77 5 testing integration-testing typescript cypress

我已经为需要登录的应用程序编写了许多 cypress e2e 测试。我已经编写了成功的测试,但是测试已经开始失败。测试期望应用程序在启动时注销,否则在尝试查找电子邮件和密码字段时会失败。当 cypress 打开浏览器窗口时,应用程序就会登录。之前我只会通过 cypress 浏览器注销并重新运行测试。现在它将再次打开,就好像它仍然处于登录状态一样。

如何防止 cypress 浏览器窗口在页面已登录的情况下启动?有没有办法刷新应用程序状态,以便它忘记以前的任何登录?

Stu*_*uck 5

尝试也清洁indexedDB

indexedDB.deleteDatabase('firebaseLocalStorageDb');
Run Code Online (Sandbox Code Playgroud)


Fen*_*ton 0

Cypress 在每次测试前都会清除所有cookie本地存储。这表明您的问题属于以下问题之一:

a) 您在单个测试中运行多个逻辑测试,或者

b) 被测系统使用另一种机制来持久登录

如果您没有执行a),那么您需要找出用户登录时存储的内容(以及位置)。一旦您知道了这一点,您就可以编写一种机制来清除它。

额外的柏树笔记

Cypress 的核心概念之一是您应该避免条件测试。例如,在其他框架中,通常运行等效的...

// Not real code
if (getelement(x).exists) {

}
Run Code Online (Sandbox Code Playgroud)

但这不是赛普拉斯的方式。

处理您的具体情况的正确方法是选择以下其中一项。

  1. 导航到始终允许您的测试登录的 URL,例如http://www.example.com/login/- 即使已登录的用户也可以提交登录表单

  2. 使用查询参数向服务器发出信号,表明它应该清除任何用户状态(如果它没有存储在预期的位置之一 - 想象一台服务器将 IP 地址固定在某些状态等)

  3. 将数据嵌入到 DOM 中,这意味着 Cypress 总是能找到它......例如:<body data-logged-in="true">. 然后您可以在测试中读取此属性,因为它始终存在......

获取属性:

cy.get('body').should('have.attr', 'data-logged-in').then((loggedIn) => {
    // Use loggedIn here...
});
Run Code Online (Sandbox Code Playgroud)