前言¶
用 AI 編程助手改前端,往往卡在同一個環節:代碼改完了,功能到底跑沒跑通,Agent 自己說不清。你讓它「幫我測一下登錄頁」,它多半隻能讀源碼、猜 DOM 結構,或者建議你手動打開瀏覽器點一遍。靜態 HTML 還好,一旦遇到 React、Vue 這類需要等 JavaScript 渲染的單頁應用,光靠讀文件根本沒法確認頁面真實長什麼樣。
Anthropic 在官方 skills 倉庫裏提供了一個叫 webapp-testing 的 Agent Skill,把 Playwright 瀏覽器自動化和本地服務器生命週期管理封裝成一套可複用的工作流。Agent 加載這個 Skill 後,可以寫 Python 腳本啓動本地 dev server、打開無頭 Chromium、截圖、抓控制檯日誌,按「先偵察、再操作」的模式驗證 UI 行爲。對需要頻繁改前端、又希望 Agent 能自主迴歸測試的開發者來說,這比反覆口述「你幫我看看頁面」要靠譜得多。
這是什麼¶
webapp-testing 是 Anthropic 官方 skills 倉庫 中的示例 Skill,遵循通用的 SKILL.md 格式,可在 Cursor、Claude Code、Claude.ai 等支持 Agent Skills 的工具中使用。
它的定位很直接:用 Python Playwright 與本地 Web 應用交互和測試,支持功能驗證、UI 調試、截圖與瀏覽器日誌查看。Skill 包裏還附帶 scripts/with_server.py 輔助腳本和若干示例,教 Agent 如何管理服務器啓停、選擇測試策略、避免常見的動態頁面陷阱。
核心功能與亮點¶
1. 決策樹:靜態頁與動態應用分開處理¶
Skill 內置了一套選擇邏輯,Agent 會先判斷頁面類型再決定測試路徑:
- 靜態 HTML:直接讀取 HTML 文件找選擇器,寫 Playwright 腳本訪問
file://或本地服務; - 動態 Web 應用:若服務未啓動,用
with_server.py拉起 dev server;若已在跑,則走「偵察—操作」流程——先導航並等待networkidle,再截圖或檢查 DOM,從渲染結果裏找選擇器,最後執行點擊、填表等操作。
2. 服務器生命週期管理¶
scripts/with_server.py 是 Skill 的核心輔助工具,支持同時管理多個本地服務(比如後端 3000 端口 + 前端 5173 端口),等端口就緒後再跑自動化腳本,結束後自動清理進程。Agent 被明確要求:先跑 --help 看用法,把腳本當黑盒調用,不要先讀源碼——因爲這些腳本可能很大,直接塞進上下文會浪費 token。
3. 偵察—操作(Reconnaissance-Then-Action)模式¶
對動態單頁應用,Skill 強調先看清頁面再動手:
page.screenshot(path='/tmp/inspect.png', full_page=True)
content = page.content()
page.locator('button').all()
從截圖、DOM 內容和元素列表裏發現穩定的選擇器(text=、role=、CSS、ID),再寫後續交互邏輯。官方特別提醒:動態應用在檢查 DOM 之前必須 wait_for_load_state('networkidle'),否則拿到的結構不完整。
4. 示例腳本覆蓋常見場景¶
Skill 的 examples/ 目錄提供了三個參考:
element_discovery.py:掃描頁面上的按鈕、鏈接、輸入框;static_html_automation.py:用file://URL 測試本地靜態 HTML;console_logging.py:監聽並保存瀏覽器控制檯輸出,便於排查 JS 報錯。
5. 最佳實踐約束¶
Skill 對 Agent 的行爲做了明確規範:使用 sync_playwright() 寫同步腳本;Chromium 始終以 headless 模式啓動;操作完成後關閉瀏覽器;優先用描述性選擇器;必要時加 wait_for_selector() 或超時等待。
安裝與啓用¶
Claude Code¶
Anthropic 官方 README 提供了插件市場安裝方式。在 Claude Code 中註冊 marketplace 後,安裝 example-skills 插件即可使用倉庫中的示例 Skill(含 webapp-testing):
/plugin marketplace add anthropics/skills
/plugin install example-skills@anthropic-agent-skills
安裝後直接在對話裏提及即可,例如:「用 webapp-testing 幫我驗證本地前端改動」。
Claude.ai 與 Claude API¶
Claude.ai 付費計劃已內置部分示例 Skill;自定義 Skill 可按 Using skills in Claude 上傳。API 側可通過 Skills API 使用預置或自定義 Skill。
Cursor¶
Cursor 支持通用的 SKILL.md 格式。將 Skill 目錄放到項目級 .cursor/skills/ 或全局 ~/.cursor/skills/ 即可被 Agent 自動發現:
git clone https://github.com/anthropics/skills.git
cp -r skills/skills/webapp-testing .cursor/skills/webapp-testing
也可在 Cursor 的 Customize → Rules → Remote Rule (Github) 中導入 GitHub 倉庫。使用前需在本機安裝 Playwright Python 包及瀏覽器:
pip install playwright
playwright install chromium
Agent 會在對話上下文匹配時自動加載 Skill,也可在聊天中輸入 /webapp-testing 或 @webapp-testing 手動喚起。
典型用法示例¶
單服務器:啓動 dev server 並跑自動化¶
python scripts/with_server.py --server "npm run dev" --port 5173 -- python your_automation.py
多服務器:前後端同時拉起¶
python scripts/with_server.py \
--server "cd backend && python server.py" --port 3000 \
--server "cd frontend && npm run dev" --port 5173 \
-- python your_automation.py
自動化腳本里只寫 Playwright 邏輯,服務器由 helper 託管:
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
page = browser.new_page()
page.goto('http://localhost:5173')
page.wait_for_load_state('networkidle')
# 在此編寫斷言、點擊、填表等邏輯
browser.close()
捕獲控制檯日誌¶
console_logs = []
def handle_console_message(msg):
console_logs.append(f"[{msg.type}] {msg.text}")
page.on("console", handle_console_message)
page.goto(url)
page.wait_for_load_state('networkidle')
適用場景與注意事項¶
適合誰用:
- 本地開發前後端分離項目,需要 Agent 改完代碼後自動跑一遍 UI 驗證;
- 調試單頁應用的渲染時序、選擇器穩定性,需要截圖和 DOM 偵察;
- 排查前端 JS 報錯,需要把瀏覽器 console 輸出落盤分析;
- 希望把「測本地 Web 應用」這套流程固化成 Agent 可重複執行的標準操作。
需要注意:
- Skill 要求寫 Python Playwright 腳本,不是 Node.js 版 Playwright;運行環境需提前裝好依賴。
with_server.py等 bundled 腳本應作爲黑盒調用,先--help再執行,避免 Agent 把大段源碼讀進上下文。- 動態頁面務必等
networkidle,這是官方標註的 Common Pitfall,跳過這步會導致選擇器識別失敗。 - 倉庫 README 聲明這些 Skill 以演示和教育爲目的,生產環境使用前請在自己的項目中充分測試。
- 該 Skill 面向 本地 Web 應用;遠程 staging / 生產環境的 E2E 測試需自行調整 URL 和網絡策略。
小結¶
webapp-testing 把 Playwright 自動化測試封裝成 Agent Skill,解決了「AI 改前端但沒法自己驗」的痛點。決策樹幫你區分靜態頁和動態應用,with_server.py 管好多服務啓停,偵察—操作模式讓 Agent 先看渲染結果再寫交互。如果你已經在用 Cursor 或 Claude Code,把這個 Skill 放進 .cursor/skills/ 或對應插件裏,下次改完 UI 直接讓 Agent 跑腳本驗證,比手動點瀏覽器高效得多。
官方地址:https://github.com/anthropics/skills/tree/main/skills/webapp-testing