内容
**Selenium MCP Server with AI**
这个 **JAVA MAVEN TESTNG 项目** 实现了一个用 Java 编写的 Selenium 主控程序 (MCP) 服务器,通过使用语言模型 (LLM) 将自然语言测试步骤转换为 Selenium WebDriver 命令,从而执行浏览器自动化任务。该服务器支持本地 Ollama 或远程 LLM 端点,并可以通过属性文件进行配置。项目中包含一个基于 TestNG 的客户端,用于发送测试提示和记录结果。
**项目结构**
* src/main/java/**McpServer**.java: 处理 HTTP 请求、LLM 交互和 Selenium 命令执行的主服务器类。
* src/main/java/**LlmClient**.java: 处理与 LLM (Ollama 或远程 API) 的通信。
* src/test/java/**SeleniumTestClient**.java: 发送测试步骤到服务器并记录结果的 TestNG 客户端。
* **config.properties**: 服务器设置的配置文件(端口、浏览器、LLM 端点)。
* **selenium_operations.properties**: 定义支持的 Selenium 操作及其所需参数。
* **pom.xml**: 包含依赖项的 Maven 配置。
**应用流程**:
* **步骤 1**: 客户端输入自然语言测试步骤到 MCP 服务器
* **步骤 2**: MCP 服务器处理输入,并使用增强的 PROMPT 调用 LLM
* **步骤 3**: LLM 返回 MCP 的命令
* **步骤 4**: MCP 服务器使用响应并在浏览器上执行 Selenium 命令
**先决条件**
* **Java**: 17 或更高版本
* **Maven**: 3.6.0 或更高版本
* **WebDriver**: 安装并添加到 PATH 的 ChromeDriver 或 FirefoxDriver(与您的浏览器版本匹配)
* **LLM**: 任选其一:
* 本地 Ollama 运行在 http://localhost:11434(默认)并使用类似 llama3 的模型
* 具有 API 密钥的远程 LLM 端点(例如,兼容 OpenAI 的 API)
* **浏览器**: 安装 Chrome 或 Firefox
* **TestNG**: 通过 Maven 包含,无需单独安装
**设置**
步骤 1:
* 克隆项目:
* git clone <repository-url>
* cd selenium-mcp
安装依赖项: 运行以下命令下载依赖项:
mvn install
配置服务器: 编辑项目根目录中的 config.properties 以设置:
* **server.port**: HTTP 服务器端口(默认: 8080)
* **browser**: 浏览器类型(chrome 或 firefox,默认: chrome)
* **llm.endpoint**: LLM API URL(默认: http://localhost:11434 用于 Ollama)
* **llm.model**: LLM 模型名称(默认: llama3)
* **llm.apiKey**: 远程 LLM 的 API 密钥(Ollama 留空)
**示例 config.properties:**
* server.port=8080
* browser=chrome
* llm.endpoint=http://localhost:11434
* llm.model=llama3
* llm.apiKey=
步骤 2:
* 使用 **McpServer**.java 启动服务器
* 运行 selenium 客户端文件以查看测试执行 **SeleniumTestClient**.java
**配置 Selenium 操作**: selenium_operations.properties 文件定义了支持的 Selenium 命令及其参数。它包括像 start_browser、navigate、click_element 等操作。如果需要,可以修改此文件以添加或更改操作。
示例
* selenium_operations.properties:
* start_browser=browser,headless
* navigate=url
* click_element=by,value,timeout
# ... (其他操作)
**设置 Ollama(如果使用本地 LLM)**:
安装 Ollama(请参阅 Ollama 文档)。
启动 Ollama 服务器:
`ollama serve`
确保指定的模型(例如,llama3)已被拉取: ollama pull llama3
**运行服务器**
启动服务器: 运行 McpServer 类:
`mvn exec:java -Dexec.mainClass="McpServer"`
或者,使用您的 IDE 运行 McpServer.java。
服务器将在配置的端口(默认: http://localhost:8080)上启动,并监听 /execute 的 POST 请求。
验证服务器: 检查控制台以确认:
MCP 服务器已在端口 8080 启动
**运行客户端**
运行测试: 执行 TestNG 客户端以发送测试步骤并生成结果:
mvn test
或者,在您的 IDE 中使用 TestNG 插件运行 SeleniumTestClient.java。
客户端发送一个示例测试提示(例如,导航到 https://example.com,点击一个链接,并验证文本),并使用 TestNG 记录结果。
查看测试结果: TestNG 在 test-output/ 目录中生成报告(HTML 和 XML 格式),包含通过/失败状态和详细信息。
SeleniumTestClient.java 中的示例测试步骤:
输入自然语言测试步骤 = "导航到 en.wikipedia.org。搜索印度。截取屏幕截图";
**示例 LLM 输出**
LLM 必须将测试步骤转换为与 selenium_operations.properties 中的操作匹配的 JSON 命令数组。示例:
[
{"type": "start_browser", "browser": "chrome", "headless": "false"},
{"type": "navigate", "url": "https://example.com"},
{"type": "click_element", "by": "xpath", "value": "//a[text()='More information']", "timeout": "10000"},
{"type": "get_element_text", "by": "xpath", "value": "//body", "timeout": "10000"},
{"type": "close_session"}
]
**支持的 Selenium 操作**:
服务器支持以下操作(在 **selenium_operations.properties** 中定义):
* **start_browser**: 启动浏览器会话(browser, headless)。
* **navigate**: 导航到一个 URL(url)。
* **find_element**: 定位一个元素(by, value, timeout)。
* **click_element**: 点击一个元素(by, value, timeout)。
* **send_keys**: 向一个元素发送文本(by, value, text, timeout)。
* **get_element_text**: 获取元素文本(by, value, timeout)。
* **hover**: 悬停在一个元素上(by, value, timeout)。
* **drag_and_drop**: 将一个元素拖动到另一个元素(by, value, targetBy, targetValue, timeout)。
* **double_click**: 双击一个元素(by, value, timeout)。
* **right_click**: 右击一个元素(by, value, timeout)。
* **press_key**: 模拟按键(key)。
* **upload_file**: 上传文件(by, value, filePath, timeout)。
* **take_screenshot**: 捕获屏幕截图为 base64(outputPath 可选)。
* **close_session**: 关闭当前浏览器会话。
**注意事项**
**LLM 配置**: 确保 LLM 返回与 selenium_operations.properties 中的操作匹配的结构化 JSON 命令。如有需要,请调整 McpServer.java 中的提示。
WebDriver 兼容性: 确保 ChromeDriver 或 GeckoDriver 与您的浏览器版本匹配。
文件上传: upload_file 操作需要一个服务器可访问的有效文件路径。
屏幕截图: take_screenshot 操作返回 base64 数据,以避免服务器端文件系统的依赖。
错误处理: 服务器捕获并报告每个命令的错误。
扩展操作: 向 selenium_operations.properties 添加新操作,并根据需要更新 McpServer.java 中的 executeCommand。
**故障排除**
服务器无法启动: 检查 config.properties 中的设置是否有效,并确保 LLM 端点可访问。
WebDriver 错误: 验证 ChromeDriver/GeckoDriver 是否在 PATH 中并与您的浏览器兼容。
LLM 问题: 确保 Ollama 正在运行,或远程 LLM 端点和 API 密钥是否正确。
测试失败: 检查 test-output/ 中的 TestNG 报告以获取详细错误信息。
**许可证**
该项目根据 MIT 许可证进行许可。