selenium-skill:讓 AI 按 Selenium WebDriver 規範寫端到端測試

前言

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

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜