求助:如何在Cypress中自动化或绕过文本型验证码?
处理文本验证码的可行方案
测试环境绕过(优先推荐)
找开发团队在测试环境做针对性调整:- 给测试专用账号添加白名单,登录或验证时直接跳过验证码步骤
- 设置固定验证码值(比如永久为
123456),测试时直接填入该值 - 新增测试专用接口,调用后可绕过验证码验证逻辑
验证码的核心作用是拦截恶意自动化,测试环境完全没必要用它阻碍测试流程,这是最稳定的解决方式。
拦截验证码请求固定返回值
如果验证码是通过前端请求后端接口生成的,用Cypress的cy.intercept()拦截该请求,直接返回预设的验证码内容:
// 拦截获取验证码的接口,返回固定验证码 cy.intercept('GET', '/api/captcha/generate', { code: 'XYZH', image: 'base64-encoded-image' // 可选,保证页面显示的验证码和输入值一致 }).as('fetchCaptcha'); // 触发验证码加载(比如点击刷新按钮) cy.get('.captcha-refresh').click(); cy.wait('@fetchCaptcha'); // 填入预设的验证码 cy.get('#captcha-input').type('XYZH');
- 解决手动输入时验证码刷新的问题
你用cy.pause()时验证码变更,是因为页面有自动刷新验证码的定时器。可以先禁用定时器再暂停:
// 禁用页面的setInterval,阻止验证码自动刷新 cy.window().then(win => { cy.stub(win, 'setInterval').returns(null); }); // 此时暂停,验证码不会自动变更,手动输入后继续测试 cy.pause();
- OCR识别(临时救急,不推荐)
用Tesseract.js这类OCR库识别验证码图片,但准确率受验证码样式、干扰线影响极大,且容易触发反爬机制,仅适合临时测试场景。实现思路是获取验证码图片的base64数据,传入OCR库解析后填入输入框,但稳定性极差,不建议作为长期方案。
内容的提问来源于stack exchange,提问作者ben ben
相关产品推荐
相关产品推荐

