rad*_*n77 5 testing integration-testing typescript cypress
我已经为需要登录的应用程序编写了许多 cypress e2e 测试。我已经编写了成功的测试,但是测试已经开始失败。测试期望应用程序在启动时注销,否则在尝试查找电子邮件和密码字段时会失败。当 cypress 打开浏览器窗口时,应用程序就会登录。之前我只会通过 cypress 浏览器注销并重新运行测试。现在它将再次打开,就好像它仍然处于登录状态一样。
如何防止 cypress 浏览器窗口在页面已登录的情况下启动?有没有办法刷新应用程序状态,以便它忘记以前的任何登录?
尝试也清洁indexedDB:
indexedDB.deleteDatabase('firebaseLocalStorageDb');
Run Code Online (Sandbox Code Playgroud)
Cypress 在每次测试前都会清除所有cookie和本地存储。这表明您的问题属于以下问题之一:
a) 您在单个测试中运行多个逻辑测试,或者
b) 被测系统使用另一种机制来持久登录
如果您没有执行a),那么您需要找出用户登录时存储的内容(以及位置)。一旦您知道了这一点,您就可以编写一种机制来清除它。
Cypress 的核心概念之一是您应该避免条件测试。例如,在其他框架中,通常运行等效的...
// Not real code
if (getelement(x).exists) {
}
Run Code Online (Sandbox Code Playgroud)
但这不是赛普拉斯的方式。
处理您的具体情况的正确方法是选择以下其中一项。
导航到始终允许您的测试登录的 URL,例如http://www.example.com/login/- 即使已登录的用户也可以提交登录表单
使用查询参数向服务器发出信号,表明它应该清除任何用户状态(如果它没有存储在预期的位置之一 - 想象一台服务器将 IP 地址固定在某些状态等)
将数据嵌入到 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)
| 归档时间: |
|
| 查看次数: |
4168 次 |
| 最近记录: |