前言¶
很多存量项目仍用 Selenium WebDriver 做浏览器自动化,而对话式编码助手近年更常默认输出 Playwright 示例。团队若要保持 Maven/JUnit、pytest、NUnit 等既有栈,需要反复纠正定位方式、等待策略和项目结构。selenium-skill 是面向 Agent 的专用 Skill:在用户提到 Selenium、WebDriver、Grid 或跨浏览器测试时,引导模型生成可本地或云端执行的 WebDriver 脚本,并约束常见反模式。
这是什么¶
selenium-skill 来自 LambdaTest/agent-skills 仓库中的 selenium-skill 目录,采用通用 SKILL.md 格式;元数据标明作者为 TestMu AI,版本 1.0,许可证 MIT,分类为 e2e-testing。
官方描述概括为:生成生产级 Selenium WebDriver 自动化脚本与测试,支持 Java、Python、JavaScript、C#、Ruby、PHP;可在本机执行,也可对接 TestMu AI 云(资料中写明支持 3000+ 浏览器/操作系统组合)。触发词包括 Selenium、WebDriver、RemoteWebDriver、ChromeDriver、GeckoDriver、Selenium Grid、cross-browser、TestMu、LambdaTest 等。
核心功能¶
执行目标分流¶
Skill 要求先判断运行环境,再写代码:
- 用户提到 cloud、TestMu、LambdaTest、Grid、cross-browser、真机等 → 走 TestMu AI 云(
RemoteWebDriver)。 - 需要特殊组合(如 Windows 上的 Safari、旧版浏览器)→ 建议云环境。
- 用户强调 locally、本机、ChromeDriver → 本地执行。
- 意图不清时默认本地,并提示云侧可扩大覆盖。
语言与工程约定¶
| 信号 | 语言 | 配置 |
|---|---|---|
| 默认 / 无明确信号 | Java | Maven + JUnit 5 |
Python、pytest、.py |
Python | pip + pytest |
JavaScript、Node、.js |
JavaScript | npm + Mocha/Jest |
| C#、.NET、NUnit | C# | NuGet + NUnit |
Ruby、.rb、RSpec |
Ruby | gem + RSpec |
| PHP、Codeception | PHP | Composer + PHPUnit |
非 Java 语言时,Skill 指向阅读 reference/<language>-patterns.md。
请求范围¶
| 请求类型 | 行为 |
|---|---|
| 为某功能写测试 | 单测文件,内联 setup |
| 搭建 Selenium 项目 | 完整工程(含 POM、配置、基类) |
| 修复/调试测试 | 阅读 reference/debugging-common-issues.md |
| 云上运行 | 阅读 reference/cloud-integration.md |
Java 默认模式(摘录)¶
定位优先级:id → name → cssSelector → 相对 XPath;禁止脆弱绝对 XPath(如 //div[3]/span[2]/a)。
等待:必须使用显式 WebDriverWait;禁止 Thread.sleep(),且不要混用隐式等待与显式等待。
反模式对照(官方表格要点):无等待的 findElement 易抛 NoSuchElementException;测试结束须在 teardown 中 driver.quit()。
校验清单:定位符、仅显式等待、清理浏览器、云凭证环境变量、POM 中放定位与页面操作、测试中放断言。
参考文档¶
Skill 内嵌多份 reference,按需引用:
| 文件 | 用途 |
|---|---|
reference/cloud-integration.md |
云/Grid、并行、capabilities |
reference/page-object-model.md |
完整 POM、基类、工厂 |
reference/python-patterns.md 等 |
各语言惯用写法 |
reference/debugging-common-issues.md |
陈旧元素、超时、不稳定用例 |
安装与启用¶
已抓取资料未给出 Cursor、Codex CLI、Claude Code 的统一安装命令或配置字段。实际使用时,将仓库中 selenium-skill 目录按你所用 Agent 产品的 Skill 加载方式接入即可;具体路径与启用步骤以 官方目录 及对应产品文档为准。
典型用法¶
本地 Java + JUnit 5 登录流¶
下面示例来自 Skill 正文,展示显式等待与 teardown:
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.By;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.junit.jupiter.api.*;
import java.time.Duration;
public class LoginTest {
private WebDriver driver;
private WebDriverWait wait;
@BeforeEach
void setUp() {
driver = new ChromeDriver();
wait = new WebDriverWait(driver, Duration.ofSeconds(10));
driver.manage().window().maximize();
}
@Test
void testLogin() {
driver.get("https://example.com/login");
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("username")))
.sendKeys("user@test.com");
driver.findElement(By.id("password")).sendKeys("password123");
driver.findElement(By.cssSelector("button[type='submit']")).click();
wait.until(ExpectedConditions.urlContains("/dashboard"));
Assertions.assertTrue(driver.getTitle().contains("Dashboard"));
}
@AfterEach
void tearDown() {
if (driver != null) driver.quit();
}
}
本地 Java 工程常用 mvn test 或 mvn test -Dtest=LoginTest 执行(Skill Quick Reference)。
Page Object 片段¶
页面类集中维护定位符,测试类负责断言:
public class LoginPage {
private WebDriver driver;
private WebDriverWait wait;
private By usernameField = By.id("username");
private By passwordField = By.id("password");
private By submitButton = By.cssSelector("button[type='submit']");
public LoginPage(WebDriver driver) {
this.driver = driver;
this.wait = new WebDriverWait(driver, Duration.ofSeconds(10));
}
public void login(String username, String password) {
wait.until(ExpectedConditions.visibilityOfElementLocated(usernameField))
.sendKeys(username);
driver.findElement(passwordField).sendKeys(password);
driver.findElement(submitButton).click();
}
}
TestMu AI 云(RemoteWebDriver)¶
云侧 Hub 使用环境变量 LT_USERNAME、LT_ACCESS_KEY,地址形如 https://{username}:{accessKey}@hub.lambdatest.com/wd/hub。capabilities 中通过 LT:Options 设置 platform、build、name、video、network 等;测试结束后可通过 lambda-status 脚本上报 passed/failed。完整并行与能力项见 reference/cloud-integration.md。
适用场景与注意¶
适合:维护 Selenium 技术栈的 Legacy 工程;需要 Grid/跨浏览器/云真机矩阵;希望 AI 输出与团队规范一致的 WebDriver 代码(等待、POM、清理)。
注意:Skill 默认 Java;其他语言依赖仓库内 reference,需保证 Agent 能读取这些文件。云执行依赖有效 LambdaTest/TestMu 账号与环境变量,资料未包含定价或配额说明。截断资料中 Advanced Playbook 未完整展示,深度生产实践仍以仓库内完整 SKILL.md 与 reference 为准。
结尾¶
selenium-skill 把「选本地还是云、选哪种语言栈、单测还是整包工程」写成固定决策树,并把 WebDriver 等待与定位约束写进生成流程,减少 Playwright 范式误用到 Selenium 项目的情况。官方地址:https://github.com/LambdaTest/agent-skills/tree/main/selenium-skill