如何在Cypress中绕过邮箱验证码实现自动化登录?
解决Cypress登录测试中邮箱验证码的绕过方案
方法1:使用测试环境专属免验证账号
多数后端会为测试环境配置无需验证码的测试账号,直接使用这类账号登录即可跳过验证步骤。
- 示例代码:
cy.visit('/login') cy.get('[data-testid="username-input"]').type('test_no_verify_user') cy.get('[data-testid="password-input"]').type('test_pass_123') cy.get('[data-testid="login-submit-btn"]').click() // 直接进入系统,无需处理验证码
方法2:调用内部接口获取验证码
如果测试环境后端提供了获取验证码的内部接口,可通过接口请求拿到验证码后填入:
- 示例代码:
cy.visit('/login') // 输入账号密码触发验证码发送 cy.get('[data-testid="username-input"]').type('your_test_email@xxx.com') cy.get('[data-testid="password-input"]').type('test_password') cy.get('[data-testid="send-code-btn"]').click() // 请求内部接口获取验证码 cy.request('POST', '/api/test/get-verification-code', { email: 'your_test_email@xxx.com' }) .then(res => { const verifyCode = res.body.code cy.get('[data-testid="code-input"]').type(verifyCode) cy.get('[data-testid="login-submit-btn"]').click() })
方法3:覆盖前端验证逻辑
直接修改前端的验证函数或状态,强制跳过验证码校验:
- 示例代码(假设前端存在
verifyCodeValid校验函数):
cy.visit('/login') // 输入账号密码 cy.get('[data-testid="username-input"]').type('your_test_email@xxx.com') cy.get('[data-testid="password-input"]').type('test_password') // 覆盖验证函数,直接返回验证通过 cy.window().then(win => { win.verifyCodeValid = () => true }) // 点击登录,无需输入验证码 cy.get('[data-testid="login-submit-btn"]').click()
方法4:配合后端配置固定验证码
协调后端同学在测试环境设置固定验证码(比如123456),测试时直接输入该固定值即可完成验证。
注意:以上所有方法仅适用于测试环境,严禁在生产环境使用,避免引发安全风险。
内容的提问来源于stack exchange,提问作者user21948019
相关产品推荐
相关产品推荐

