GitHub Copilot Agent Skills:教会 AI 你的仓库模式
Source: Dev.to
宣布于 2025 年 12 月 18 日
示例仓库: SeleniumSelfHealing.Reqnroll
为什么这很重要
每个测试自动化工程师最终都会遇到同样的难题:你花了数周时间构建一个带有自定义模式的稳健框架,却发现 AI 助手提供的代码脆弱、过时,且忽视了你的架构。
GitHub 的 Agent Skills(发布于 2025 年 12 月 18 日)允许你将 instruction sets(指令集)与代码一起发布,这样 Copilot 在检测到相关提示时就能自动应用正确的逻辑。该功能适用于:
- Copilot Coding Agent
- Copilot CLI
- Visual Studio Code 中的 Agent 模式
下面是一步步演示我们如何教会 Copilot 我们的 self‑healing Selenium(自愈 Selenium)模式。
什么是 Agent Skills?
“Agent Skills 允许您教会 Copilot 以特定、可重复的方式执行专门任务。当 Copilot 判断某项技能与您的任务相关时,它会加载指令并遵循它们。” – GitHub announcement
它们是如何工作的
- 添加一个技能文件夹 到
.github/skills/。 - 创建一个
SKILLS.md文件,内容包括:- 简短的描述。
- 使用示例。
- 任何辅助脚本或数据文件。
- 提交更改。
- 当 Copilot 检测到匹配的上下文时,会自动加载该技能——无需手动激活。
问题:脆弱的 Selenium 测试
典型的 Selenium 代码将测试与易碎的选择器耦合:
// Example of a brittle approach
var button = driver.FindElement(By.XPath("//button[@id='submit-2023']"));
button.Click();
当元素的 ID 发生变化时,测试会崩溃。
我们的框架用 语义化、AI 驱动的元素恢复 替代硬编码选择器。没有相应的技能时,Copilot 仍会建议使用旧的模式。
创建代理技能
目录结构
.github/
└─ skills/
└─ selenium-self-healing/
├─ SKILLS.md
├─ recover-element.js # optional helper script
└─ README.md # optional documentation
SKILLS.md(技能的核心)
# Selenium Self‑Healing Automation Skill
目标
教导 Copilot 生成使用我们的 semantic‑selector 辅助工具的 Selenium 代码,而不是使用脆弱的 XPath/CSS 选择器。
工作原理
- 调用
FindElementByDescription(string description)– 我们基于 AI 的恢复引擎的包装器。 - 该方法返回一个对 UI 变化具有弹性的
IWebElement。 - 像使用普通 Selenium 元素一样使用返回的元素。
示例用法
// ❌ Old, brittle code
var submitBtn = driver.FindElement(By.XPath("//button[@id='submit-2023']"));
submitBtn.Click();
// ✅ New, self‑healing code
var submitBtn = driver.FindElementByDescription("the submit button on the login page");
submitBtn.Click();
实现细节
- 该辅助方法位于
SeleniumSelfHealing.Extensions命名空间。 - 它内部调用
ElementRecoveryService.RecoverAsync(description)。 - 如果恢复失败,则回退到原始选择器(如果提供的话)。
何时触发技能
- 提示包含类似 “find the submit button”、“click the login button” 或 “use our self‑healing selector” 的短语。
- 正在编辑的文件是位于
Tests/文件夹下的.cs测试文件。
常见问题
Q: 我需要导入命名空间吗?
A: 是的。请在文件顶部添加 using SeleniumSelfHealing.Extensions;。
Q: 我可以自定义描述语言吗?
A: 恢复引擎使用模糊匹配算法;自然语言效果最佳。
### 可选辅助脚本 (`recover-element.js`)
如果您需要一个用于 CLI 的快速 Node‑JS 演示,可以提供一个小的包装器:
```js
// recover-element.js
const { recoverElement } = require('./element-recovery-service');
async function main() {
const description = process.argv[2];
const element = await recoverElement(description);
console.log(JSON.stringify(element));
}
main().catch(console.error);
## 使用技能的实践
1. **打开测试文件**(例如 `LoginTests.cs`)。
2. **开始输入**自然语言描述:
```csharp
// Find the login button using our self‑healing selector
var loginBtn = driver.FindElementByDescription("the login button on the sign‑in page");
loginBtn.Click();
- Copilot 检测到短语 “Find the … using our self‑healing selector” → 加载 Selenium Self‑Healing 技能 → 建议正确的包装方法并导入。
Copilot CLI 示例
# Generate a new test method with the skill automatically applied
copilot generate test \
--description "verify that a user can log in using the semantic selector for the login button"
CLI 将输出一个可直接运行的测试,使用 FindElementByDescription。
技巧与最佳实践
| 提示 | 为什么有帮助 |
|---|---|
保持 SKILLS.md 简洁(≤ 500 词) | Copilot 能快速解析文件并提供更高的相关性评分。 |
| 添加多个使用示例 | 更多示例提升模型匹配多样化提示的能力。 |
| 对技能文件夹进行版本控制 | 对技能的更改会像其他代码一样被追踪。 |
| 使用清晰、领域特定的术语 | 像 “self‑healing selector” 这样的短语会成为技能的强信号。 |
| 在本地测试技能 | 使用应触发技能的提示运行 copilot chat 以验证输出。 |
结论
GitHub Copilot Agent Skills 将通用的 AI 助手转变为 面向领域 的合作伙伴。通过将我们的 Selenium 自愈逻辑封装为技能,我们:
- 消除脆弱的选择器建议。
- 在 UI 变化时减少手动重构。
- 让 AI 与我们的架构标准保持一致。
在你自己的测试自动化仓库中尝试一下吧——添加 .github/skills/ 文件夹,编写清晰的 SKILLS.md,并观察 Copilot 自动适应你的工作流。祝编码愉快!
目的
- 生成健壮的 Selenium UI 测试。
- 使用 AI 驱动的自愈定位策略。
- 使用 Reqnoll 遵循 BDD 模式。
硬性规则
必须
- 使用自愈 WebDriver 扩展
- 更倾向于使用元素描述而非原始定位器
- 生成异步步骤定义
- 记录所有自愈尝试
禁止
- 硬编码 XPath 或 CSS 选择器
- 使用
Thread.Sleep - 绕过自愈逻辑
金色示例
步骤定义模式
[When(@"I click the ""(.*)""")]
public async Task WhenIClickElement(string elementDescription)
{
await _driver.Click(
By.CssSelector(""),
elementDescription
);
}
Gherkin 场景
Scenario: Search for Selenium
Given I navigate to "https://www.wikipedia.org"
When I enter "Selenium" into the "search box"
And I click the "search button"
Then I should see "Selenium"
添加技能后,开发者输入
// Create step definition to click login button
Copilot 现在生成
[When(@"I click the ""(.*)""")]
public async Task WhenIClickElement(string elementDescription)
{
await _driver.Click(By.CssSelector(""), elementDescription);
}
结果: 生成的代码遵循我们的自愈模式,使用语义化描述而不是脆弱的定位器。
有效的关键组件
- 清晰的规则 – 定义明确的必须做和禁止做项目。具体性可带来更好的结果。
- 可运行的示例 – 使用来自代码库的真实代码;Copilot 从实际模式中学习,而非理论。
- 结构上下文 – 说明项目的组织方式,以便 Copilot 将代码放在正确的位置。
- 模板 – 为开发者经常遇到的场景提供脚手架。
验证它是否有效
- 打开 Copilot Chat 并询问:“我应该如何创建新的步骤定义?”
- 在回复中查找 对你的
SKILLS.md的引用。 - 检查建议——它们应当符合你的模式(async 方法、element‑description 参数、自我修复扩展)。
- 创建一个包含触发你模式的注释的测试文件,并观察 Copilot 的建议。
重要要求
- GitHub Copilot Agent Skills 需要付费计划(个人版、企业版或企业版)。
- 该功能可在以下环境中使用:
- Copilot 编码代理,
- GitHub Copilot CLI,和
- VS Code Insiders 的代理模式(对稳定版 VS Code 的支持即将推出)。
- 即使没有付费计划,
SKILLS.md仍然是团队的有价值文档。 - 新的技能文件可能需要 5–10 分钟 才能完成索引;如果建议未立即出现,请重新加载 IDE。
为什么这对测试自动化很重要
测试框架正超越标准实践而不断演进。
自愈定位器、AI 驱动的恢复、定制断言——这些模式并未包含在 Copilot 的基础训练中。通过编写自己的技能(或使用社区贡献的技能),你可以将 Copilot 从一个通用的代码建议工具,转变为能够 理解并强制执行你的特定方法论 的利器。其收益不仅在于加快速度;更在于生成的代码能够保持你的架构质量标准。
入门指南
- 创建目录
/.github/skills/your-skill/。 - 添加一个
SKILLS.md文件,用于记录您最关键的模式。 - 包含 一个黄金示例(上面展示的 step‑definition 模式)。
- 使用包含触发注释的新文件来测试该技能。
- 随着发现更多模式,扩展该文件。
提示: 从小做起——专注于最重要的模式。稍后您可以扩展技能集合。
目前,技能只能在 仓库级别 创建;组织和企业级别的支持即将推出。
附加资源
- GitHub 更新日志: GitHub Copilot now supports Agent Skills
- 文档: About Agent Skills — GitHub Docs
- 社区技能: github/awesome-copilot
在你的测试自动化项目中,你会教 GitHub Copilot 哪些模式?