You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Cypress中测试提交AEM默认验证码服务?

测试AEM默认内置验证码的可行方案

针对AEM内置验证码的测试需求,这里提供几个实用思路和变通方法:

一、测试环境临时禁用验证码

这是最直接的方式,仅适用于测试环境:

  • 登录AEM的OSGi配置界面(路径:/system/console/configMgr)
  • 找到Default Captcha Service配置项
  • 将“Enabled”选项改为false,保存后所有表单的内置验证码会被禁用,测试时无需输入即可提交

如果是基于项目的配置,也可以在CRXDE Lite中修改项目下的配置文件/apps/[你的项目路径]/config/com.adobe.cq.captcha.impl.DefaultCaptchaService.cfg.json,将enabled字段设为false。

二、单元测试中Mock验证码验证逻辑

如果是编写后端单元测试,可以直接Mock AEM的CaptchaService,让验证始终通过:

import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import com.adobe.cq.captcha.CaptchaService;
import org.junit.jupiter.api.Test;
import static org.mockito.Mockito.when;
import static org.mockito.ArgumentMatchers.anyString;

@ExtendWith(MockitoExtension.class)
public class FormSubmitTest {

    @Mock
    private CaptchaService captchaService;

    @Test
    public void testValidFormSubmit() {
        // 模拟验证码验证通过
        when(captchaService.validate(anyString(), anyString())).thenReturn(true);
        
        // 执行表单提交的测试逻辑
        // ...
    }
}

三、UI自动化测试的两种处理方式

1. 从会话中获取真实验证码值

AEM会把生成的验证码存储在用户会话的CaptchaInfo对象中,测试时可以通过以下方式获取:

  • 基于Java的自动化测试(如Selenium)可部署测试专用Servlet,暴露会话中的验证码值(仅测试环境使用)
  • 或直接在测试代码中调用AEM后台API,获取当前会话的验证码内容

2. OCR识别验证码图片

使用Tesseract等OCR工具识别验证码图片文本,再自动填入输入框。这种方式稳定性稍差,适合干扰较少的验证码场景,示例代码(Python + Selenium + Tesseract):

from selenium import webdriver
import pytesseract
from PIL import Image

driver = webdriver.Chrome()
driver.get("你的表单页面URL")

# 截取验证码图片
captcha_img = driver.find_element_by_id("captcha-image")
captcha_img.screenshot("captcha.png")

# OCR识别验证码
captcha_text = pytesseract.image_to_string(Image.open("captcha.png"))

# 填入验证码输入框
driver.find_element_by_id("captcha-input").send_keys(captcha_text)

附:AEM Forms验证码功能官方说明(翻译)

AEM Forms的验证码功能用于拦截机器人自动提交表单,支持内置验证码和Google reCaptcha两种模式:

内置验证码配置步骤

  1. 登录AEM控制台,进入工具 > 表单 > 配置浏览器
  2. 选择目标表单配置,切换到验证码标签页
  3. 选择“内置验证码”,可配置以下参数:
    • 验证码长度:设置验证码的字符数量(默认6位)
    • 字符集:指定验证码使用的字符类型(如仅数字、大小写字母混合)
    • 干扰线数量:设置验证码图片中的干扰线条数,提升防机器人能力
  4. 保存配置后,对应表单会自动启用内置验证码验证

内置验证码验证流程

  1. 服务器生成验证码图片,同时将验证码的真实值存储在用户会话中
  2. 用户在表单中输入验证码并提交
  3. 服务器从会话中取出存储的验证码值,与用户输入内容对比,验证通过则处理表单提交请求

内容的提问来源于stack exchange,提问作者Mag

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 18:50:40