Selenium MCP Java测试框架
具有自愈功能的AI驱动测试自动化
一个结合了以下功能的测试自动化框架 硒, MCP(模型上下文协议),以及 黄瓜BDD 提供自愈定位器管理和人工智能辅助测试生成。Java通过stdio上的JSON-RPC 2.0与Node.js MCP Selenium服务器通信,提供自动定位器回退和从每次测试执行中学习。
______________________________________________________________________
主要特点
- 自愈定位器:通过多种定位器策略自动回退,按成功率排序
- 智能学习:跟踪每个定位器策略的成功/失败,并随着时间的推移优化选择
- API成本为零:使用本地MCP Selenium服务器(
@executeautomation/mcp-selenium)-不需要云API密钥 - 黄瓜BDD:带有标记执行的完整Gherkin场景支持
- 综合指标:详细的每个元件修复报告,确定脆性和坚固的元件
- 页面对象模型:干净的POM结构
BasePage继承和元素名称常量 - 人工智能辅助生成:与Claude Code、Cline和Amazon Q合作生成测试工件
______________________________________________________________________
建筑
Cucumber BDD (.feature files)
-> Step Definitions (stepdefinitions/)
-> Page Objects (pages/ extending BasePage)
-> SelfHealingElement (healing/) -- retry/fallback chain
-> LocatorRegistry (locators/) -- multi-strategy, JSON-persisted
-> MCPSeleniumClient (mcp/) -- JSON-RPC 2.0 stdio bridge
-> npx @executeautomation/mcp-selenium (Node.js process)
-> Browser (Chrome, Firefox)设计模式
| 模式 | 实施 |
|---|---|
| 页面对象模型 | BasePage +具有元素常量的页面子类 |
| 责任链 | 定位器回退链 SelfHealingElement |
| 战略 | LocatorStrategy 按成功率动态选择的对象 |
| 注册表 | LocatorRegistry --内存+JSON持久性 |
| 装饰师 | SelfHealingElement 用修复功能包装所有浏览器操作 |
______________________________________________________________________
快速开始
先决条件
- Java 21+
- Maven 3.6+
- Node.js 16+
- npm
安装
- 克隆存储库:
git clone
cd selenium-mcp-framework- 安装MCP Selenium:
npm install -g @executeautomation/mcp-selenium- 构建项目:
mvn clean install- 运行测试:
mvn test______________________________________________________________________
项目结构
selenium-mcp-framework/
├── src/
│ ├── main/java/framework/
│ │ ├── mcp/
│ │ │ └── MCPSeleniumClient.java # JSON-RPC 2.0 client for MCP server
│ │ ├── locators/
│ │ │ └── LocatorRegistry.java # Element-to-strategies store, JSON persistence
│ │ ├── healing/
│ │ │ ├── SelfHealingElement.java # Core healing algorithm with retry logic
│ │ │ └── HealingMetrics.java # Per-element performance tracking and reports
│ │ └── pages/
│ │ ├── BasePage.java # POM base class (element(), navigateTo(), assertions)
│ │ ├── LoginPage.java # Login page (the-internet.herokuapp.com/login)
│ │ ├── CheckboxPage.java # Checkboxes page (elements without IDs)
│ │ └── AddRemoveElementsPage.java # Add/Remove Elements page (dynamic elements)
│ └── test/
│ ├── java/
│ │ ├── runners/
│ │ │ └── RunCucumberTest.java # Cucumber JUnit runner
│ │ └── stepdefinitions/
│ │ ├── LoginSteps.java # Login feature step definitions
│ │ ├── CheckboxSteps.java # Checkbox feature step definitions
│ │ └── AddRemoveElementsSteps.java # Add/Remove feature step definitions
│ └── resources/
│ ├── features/
│ │ ├── login.feature # Login scenarios (3 scenarios)
│ │ ├── checkbox.feature # Checkbox scenarios (3 scenarios)
│ │ └── add_remove_elements.feature # Add/Remove scenarios (9 scenarios)
│ └── locators/
│ └── locators.json # Locator configuration with success stats
├── pom.xml
├── CLAUDE.md
└── README.md______________________________________________________________________
测试覆盖率
所有测试目标 互联网.herokuapp.com.有 15种情景 跨越3个特征文件:
登录(@login --3种情况)
- 使用有效凭据成功登录
- 登录失败,密码无效
- 登录失败,用户不存在
复选框(@checkbox --3种情况)
- 验证复选框页面显示正确的标题
- 打开和关闭第一个复选框
- 关闭和打开第二个复选框
添加/删除元素(@add_remove --9个场景)
- 验证页面标题
- 添加单个和多个元素
- 删除元素并验证计数更改
- 最初没有删除按钮
- 添加、删除和添加更多元素
- 逐一删除所有元素
- 从剩余的中间班次中删除
______________________________________________________________________
运作原理
自愈元素发现
当您与元素交互时,框架:
- 检索所有已注册的定位器策略 对于该元素
- 按成功率对策略进行排序 (胜率越高;平局时,优先级越低的获胜)
- 尝试每种策略 最多重试3次,重试之间延迟500ms
- 记录成功/失败 持续学习策略的重要性
- 将统计数据保存到locators.json 在测试拆卸以备将来运行时
示例
// Traditional (brittle):
driver.findElement(By.id("login-btn")).click();
// Self-healing:
element("loginButton").click();在幕后,该框架按照成功率顺序尝试策略:
css=button.login-button(成功率95%)css=.radius(如果#1失败)xpath=//button[@type='submit'](如果#2失败)css=.fa-sign-in(如果#3失败)
______________________________________________________________________
关键文件
| 文件 | 目的 |
|---|---|
MCPSeleniumClient.java | 将Node.js MCP服务器作为子进程启动,通过stdin发送JSON-RPC请求,从stdout读取响应。30秒超时。 |
LocatorRegistry.java | 存储元素到策略的映射,跟踪成功/失败计数,加载/保存到JSON。 |
SelfHealingElement.java | 核心修复算法:按成功率尝试策略,每种策略重试3次,延迟500毫秒。 |
HealingMetrics.java | 聚合每个元素的统计数据,识别易碎(\ brittleElements = healingMetrics.getBrittleElements(80.0); |
______________________________________________________________________
## 依赖项
|依赖关系|版本|目的|
| --- | --- | --- |
|Selenium WebDriver | 4.15.0|浏览器自动化|
|Cucumber(Java+JUnit)|7.14.0|BDD框架|
|Jackson(数据绑定+核心)|2.15.3|定位器和JSON-RPC的JSON处理|
|JUnit4|4.13.2|测试运行器|
______________________________________________________________________
## 其他资源
- [MCP硒](https://github.com/executeautomation/mcp-selenium) --此框架与MCP服务器通信
- [Cucumber文档](https://cucumber.io/docs/cucumber/) --BDD框架
- [Selenium文档](https://www.selenium.dev/documentation/) --浏览器自动化
______________________________________________________________________
## 贡献
1. 分叉存储库
1. 创建要素分支
1. 进行更改
1. 添加测试
1. 提交拉取请求
______________________________________________________________________
## 许可证
该项目根据MIT许可证获得许可。