前言¶
很多存量項目仍用 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