GitHub Copilot Agent Skills:教会 AI 你的仓库模式

发布: (2025年12月21日 GMT+8 02:06)
11 min read
原文: Dev.to

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

它们是如何工作的

  1. 添加一个技能文件夹.github/skills/
  2. 创建一个 SKILLS.md 文件,内容包括:
    • 简短的描述。
    • 使用示例。
    • 任何辅助脚本或数据文件。
  3. 提交更改。
  4. 当 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 选择器。

工作原理

  1. 调用 FindElementByDescription(string description) – 我们基于 AI 的恢复引擎的包装器。
  2. 该方法返回一个对 UI 变化具有弹性的 IWebElement
  3. 像使用普通 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();
  1. 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 将代码放在正确的位置。
  • 模板 – 为开发者经常遇到的场景提供脚手架。

验证它是否有效

  1. 打开 Copilot Chat 并询问:“我应该如何创建新的步骤定义?”
  2. 在回复中查找 对你的 SKILLS.md 的引用。
  3. 检查建议——它们应当符合你的模式(async 方法、element‑description 参数、自我修复扩展)。
  4. 创建一个包含触发你模式的注释的测试文件,并观察 Copilot 的建议。

重要要求

  • GitHub Copilot Agent Skills 需要付费计划(个人版、企业版或企业版)。
  • 该功能可在以下环境中使用:
    • Copilot 编码代理,
    • GitHub Copilot CLI,和
    • VS Code Insiders 的代理模式(对稳定版 VS Code 的支持即将推出)。
  • 即使没有付费计划,SKILLS.md 仍然是团队的有价值文档。
  • 新的技能文件可能需要 5–10 分钟 才能完成索引;如果建议未立即出现,请重新加载 IDE。

为什么这对测试自动化很重要

测试框架正超越标准实践而不断演进。
自愈定位器、AI 驱动的恢复、定制断言——这些模式并未包含在 Copilot 的基础训练中。通过编写自己的技能(或使用社区贡献的技能),你可以将 Copilot 从一个通用的代码建议工具,转变为能够 理解并强制执行你的特定方法论 的利器。其收益不仅在于加快速度;更在于生成的代码能够保持你的架构质量标准。

入门指南

  1. 创建目录 /.github/skills/your-skill/
  2. 添加一个 SKILLS.md 文件,用于记录您最关键的模式。
  3. 包含 一个黄金示例(上面展示的 step‑definition 模式)。
  4. 使用包含触发注释的新文件来测试该技能。
  5. 随着发现更多模式,扩展该文件。

提示: 从小做起——专注于最重要的模式。稍后您可以扩展技能集合。
目前,技能只能在 仓库级别 创建;组织和企业级别的支持即将推出。

附加资源

在你的测试自动化项目中,你会教 GitHub Copilot 哪些模式?

Back to Blog

相关文章

阅读更多 »