我构建了使用能够自我修复的 AI 的 Selenium Self-Healing 测试(方法如下)
Source: Dev.to

每个 QA 自动化工程师都会遇到的问题
你在星期五写了一个完美的 Selenium 测试。星期一早上,它就失败了。开发者把按钮的 ID 从 submit-btn 改成了 submit-button。你的测试坏了,你只能花时间修复定位器,而不是去测试新功能。
听起来很熟悉吧?我也遇到过很多次。正因如此,我构建了一个框架,让 AI 自动修复失效的定位器——再也不用担心维护噩梦。
如果测试能够自我修复呢?
传统测试:
测试运行 → 找不到元素 → 测试失败 → 你手动修复
自愈测试:
测试运行 → 找不到元素 → AI 分析页面 → AI 找到新定位器 → 测试继续
第二种情景现在已经可以实现,我将在下面一步步展示如何构建它。
我的解决方案:AI 驱动的自愈
我创建了一个框架,结合了:
- 行为驱动开发(BDD)用于可读的测试
- Selenium 用于浏览器自动化
- 本地 AI 用于智能定位器修复
最棒的是?它完全在你的机器上运行,使用免费、开源的工具。
一个真实案例
Gherkin 场景
Scenario: Search Wikipedia
Given I navigate to "https://www.wikipedia.org"
When I search for "Selenium"
Then the page should contain "Selenium"
故意写错的定位器
private readonly By _searchBox = By.Id("searchBox"); // 错误!
// 实际 ID 是 "searchInput"
当测试运行时:
- 尝试使用
By.Id("searchBox")找元素 → ❌ 失败 - AI 分析页面 HTML → 找到合适的定位器
- 测试使用新定位器 → ✅ 成功
测试在没有任何人工干预的情况下自行修复。
实际工作原理
架构
- 第 1 层 – 测试(BDD) – 测试使用 Gherkin 编写,人人都能读懂。
- 第 2 层 – 自愈引擎 – 当定位器失效时捕获页面 HTML 并将其连同上下文一起发送给 AI。
- 第 3 层 – AI – 本地运行(如 Ollama 或 GPT),根据提供的描述给出新定位器。
代码流程
// 步骤 1:正常查找元素
try
{
return driver.FindElement(locator);
}
catch (NoSuchElementException)
{
// 未找到元素 - 启动自愈
}
// 步骤 2:请求 AI 帮助
var pageHTML = driver.PageSource;
var suggestion = await aiClient.GetSuggestedLocator(
pageHTML,
failedLocator,
"Search box" // 人工描述
);
// 步骤 3:尝试 AI 的建议
var element = driver.FindElement(By.XPath(suggestion));
// 成功!
整个过程大约耗时 2–3 秒。
为什么这种方式有效
- 上下文感知:AI 能理解元素描述(例如 “登录按钮”),并找到相匹配的元素。
- 无需训练:直接利用模型对 HTML 的通用知识,无需自定义机器学习训练。
- 免费且私密:全部本地运行——没有 API 费用,数据也不离开你的网络(使用 Ollama 时)。
- 语言无关:适用于 React、Angular、Vue 或纯 HTML;AI 只读取渲染后的 HTML。
快速上手(其实很简单)
步骤 1 – 安装前置条件
- .NET 9 SDK(免费)
- Ollama(免费,本地 AI)或 OpenAI API Key
- Chrome 浏览器
步骤 2 – 下载 AI 模型
ollama pull qwen3-coder:480b-cloud
步骤 3 – 运行演示
dotnet restore
dotnet build
dotnet test
三条命令,你就能看到 AI 自愈的实际效果。
构建过程中的收获
- AI 需要上下文:提供类似 “search box” 的描述对准确建议至关重要。
- 本地 AI 已足够:免费模型如 Qwen3‑Coder 在定位器修复上表现优秀。
- 重试逻辑重要:实现多次重试后成功率从约 70 % 提升到约 95 %。
- 温度参数关键:低温度(如 0.1)能产生一致、可复现的定位器建议。
何时适合使用?
适用场景
- 经常失效的回归套件
- UI 变化频繁的应用
- 需要“魔法”演示的 Demo
- QA 人力有限的团队
不适用场景
- 生产监控(对速度有严格要求)
- 性能测试(AI 会带来额外开销)
- 需要像素级精准定位的场景
- 必须绝对避免误报的测试
技术细节
AI 集成
一个简单的 HTTP 客户端与 Ollama 的 API 通讯:
var response = await httpClient.PostAsync(
"http://localhost:11434/api/generate",
jsonContent
);
提示示例
You are a Selenium expert.
This locator failed: By.Id('searchBox')
Element description: Search input box
Here's the HTML: [truncated HTML]
Suggest a new locator that will work.
Return only the locator, nothing else.
缓存策略
如果同一定位器在同一页面上第二次失效,直接复用上一次的 AI 建议,可将重复失效的修复时间降低约 90 %。
错误处理
如果所有 AI 尝试均失败,测试会像往常一样以清晰的错误信息失败——不会出现静默错误。
扩展框架
- 添加新站点:只需用纯英文创建新的 feature 文件,自愈功能会自动生效。
- 切换 AI:通过修改单个配置文件即可切换到 OpenAI:
{
"Provider": "OpenAI",
"ApiKey": "sk-your-key",
"Model": "gpt-4o"
}
- 自定义修复逻辑:引擎是可扩展的,你可以为特定元素类型添加自定义策略。
亲自尝试
完整框架已提供,包含:
- 完整注释的代码
- 可运行的演示测试
- 设置步骤
- 文档
所有内容均面向初学者设计。即使你从未编写过 Selenium 测试,也能在 10 分钟内跑通。仓库里自带一个故意写错定位器的 Wikipedia 搜索测试,用来实时展示 AI 如何修复。
GitHub Repo: