From zenbu-powers
Git diff 驅動的瀏覽器模擬人工測試工作流程。分析程式碼變更、映射影響範圍、使用 playwright-cli 執行瀏覽器測試、錄製影片截圖、產出測試報告。
npx claudepluginhub zenbuapps/zenbu-powers --plugin zenbu-powersThis skill uses the workspace's default tool permissions.
根據 git diff 自動判斷受影響頁面,使用 playwright-cli 模擬人類操作,錄製影片並截圖重點。
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Checks Next.js compilation errors using a running Turbopack dev server after code edits. Fixes actionable issues before reporting complete. Replaces `next build`.
Guides code writing, review, and refactoring with Karpathy-inspired rules to avoid overcomplication, ensure simplicity, surgical changes, and verifiable success criteria.
Share bugs, ideas, or general feedback.
根據 git diff 自動判斷受影響頁面,使用 playwright-cli 模擬人類操作,錄製影片並截圖重點。
export CODEX_HOME="${CODEX_HOME:-$HOME/.codex}"
export PWCLI="$CODEX_HOME/skills/playwright/scripts/playwright_cli.sh"
"$PWCLI" --version
如果 $PWCLI --version 失敗 → 輸出以下訊息並中斷所有操作:
playwright-cli 不可用。請確認:
1. Node.js / npm 已安裝
2. npx 在 PATH 中
IS_CI=$(printenv GITHUB_ACTIONS || echo "false")
記住 IS_CI 值,後續決定報告模式(本地 vs CI)。
按以下優先級取得 BASE_URL:
APP_URL、SITE_URL、WP_URL、BASE_URL.env 中的 URL 相關設定package.json 的 scripts.dev / scripts.start 中的 port.wp-env.json 中的設定(WordPress 項目)docker-compose.yml 中的 port mappinghttp://localhost:3000、:5173、:8080、:8888如果無法確定 URL → 向用戶詢問,或中斷操作。
mkdir -p output/playwright/browser-test/videos
mkdir -p output/playwright/browser-test/screenshots
# 取得預設分支名稱
DEFAULT_BRANCH=$(git remote show origin 2>/dev/null | grep 'HEAD branch' | awk '{print $NF}')
DEFAULT_BRANCH=${DEFAULT_BRANCH:-master}
# 取得變更檔案清單(含統計)
git diff "origin/${DEFAULT_BRANCH}...HEAD" --name-only --stat
將每個變更檔案歸入以下類別:
| 類別 | 特徵路徑模式 | 測試策略 |
|---|---|---|
| API 變更 | routes/ controllers/ services/ api/ endpoints/ rest-api/ | 導航到所有呼叫該 API 的頁面 |
| UI 頁面變更 | pages/ views/ screens/ templates/ admin/ | 導航到所有修改到的頁面 |
| UI 組件變更 | components/ widgets/ blocks/ partials/ | 導航到其中一個使用該組件的頁面 |
| 非前端變更 | migrations/ config/ tests/ .github/ docs/ styles-only | 跳過瀏覽器測試 |
如果所有變更都歸類為「非前端變更」:
測試結果:無瀏覽器可測變更
變更摘要:
- {列出變更檔案}
- 這些變更不涉及前端頁面或 API,無需瀏覽器測試
輸出此報告後結束。
如果 Serena MCP 可用:
find_referencing_symbols 找到引用它的程式碼createBrowserRouter / <Route> 定義add_menu_page / add_submenu_page 註冊pages/ 或 app/ 目錄結構推斷Serena 不可用時:
grep 搜尋 import/require 語句找到引用檔案pages/orders/index.tsx → /ordersadmin/class-settings-page.php → /wp-admin/admin.php?page=settings| 變更類別 | 測試範圍 |
|---|---|
| API 變更 | 導航到所有呼叫該 API 的頁面,逐一測試 |
| UI 頁面變更 | 導航到所有被修改的頁面,逐一測試 |
| UI 組件變更 | 導航到其中一個使用該組件的頁面測試 |
在執行測試前,先整理出測試計畫:
## 測試計畫
### 變更摘要
- API 變更:{N} 個檔案
- UI 頁面變更:{N} 個檔案
- UI 組件變更:{N} 個檔案
### 測試目標
1. {URL} — {變更類型} — {預期行為}
2. {URL} — {變更類型} — {預期行為}
...
對測試計畫中的每個目標 URL 執行以下流程。
錄影畫質規範:所有錄影必須為 1080P (1920x1080)。Playwright 錄影解析度跟隨 viewport,因此第 2 步的
resize 1920 1080是強制規範,不可省略也不可降低——它直接決定了錄影畫質。若未來 playwright-cli 提供video-start的解析度參數,仍須鎖定 1920x1080。
# 1. 開啟頁面
"$PWCLI" open "${BASE_URL}${path}" --headed
# 2. 統一視窗解析度為 1920x1080(決定錄影畫質為 1080P,必做)
"$PWCLI" resize 1920 1080
# 3. 開始錄影(必須在所有操作之前;錄影畫質 = 1920x1080 = 1080P)
"$PWCLI" video-start
# 4. 取得頁面元素參考
"$PWCLI" snapshot
# 5. 執行測試操作(見 3.2 各類型操作指引)
# ...
# 6. 截圖重點時刻(見 3.3 截圖指引)
"$PWCLI" screenshot
# 7. 檢查 console 錯誤
"$PWCLI" console warning
# 8. 檢查網路請求
"$PWCLI" network
# 9. 停止錄影並儲存
"$PWCLI" video-stop --filename "output/playwright/browser-test/videos/${scenario_name}.webm"
network 確認 API 請求狀態碼截圖只截重點部分,不截整頁:
| 變更類型 | 截圖重點 |
|---|---|
| API 變更 | API 發出後,成功的回應通知(toast / alert / 資料更新) |
| UI 頁面 | 頁面上變更的區域(使用元素截圖 screenshot <ref>) |
| UI 組件 | 頁面上顯示該變更組件的區域(使用元素截圖 screenshot <ref>) |
截圖儲存:
"$PWCLI" screenshot # 全頁截圖(備用)
"$PWCLI" screenshot e15 # 元素截圖(優先)
# 截圖自動儲存到當前目錄,手動移至:
# output/playwright/browser-test/screenshots/{scenario}-{step}.png
以下操作後必須重新 snapshot:
每個頁面測試結束後,判定結果:
| 結果 | 條件 |
|---|---|
| 通過 | 頁面正常渲染 + 無 console error + 無 network 失敗 + 互動行為正確 |
| 警告 | 有 console warning 但無 error,功能正常 |
| 失敗 | console error / network 4xx-5xx / 頁面崩潰 / 互動異常 |
所有模式(本地 + CI)均使用以下格式,並必須將報告寫入檔案:
# 所有測試完成後,用 Bash 工具將報告寫入此路徑(必做,不可省略)
cat > output/playwright/browser-test/test-report.md << 'REPORT_EOF'
# 瀏覽器模擬測試報告
## 測試摘要
- **測試日期**:{YYYY-MM-DD}
- **變更來源**:`git diff origin/{branch}...HEAD`
- **測試頁數**:{N} 頁
- **結果**:✅ {pass} 通過 / ⚠️ {warn} 警告 / ❌ {fail} 失敗
## 測試結果明細
### {N}. {頁面名稱} ({URL})
- **變更類型**:{API/頁面/組件}
- **結果**:✅/⚠️/❌
- **操作步驟**:
1. {step}
2. {step}
- **截圖**:
- 
- **影片**:
- [▶️ 觀看影片](videos/{NN}-{name}.webm)
- **Console 錯誤**:{有/無}
- **Network 異常**:{有/無}
REPORT_EOF
⚠️ 重要:報告必須寫入磁碟(
output/playwright/browser-test/test-report.md),不可只輸出到終端。
當 GITHUB_ACTIONS=true 時:
⚠️ 禁止使用
ghCLI 發佈 Issue Comment。 在此 CI 架構中,後續的 workflow steps 會自動讀取test-report.md、上傳媒體到 CDN 並發佈 Issue Comment。 Agent 的職責只是確保output/playwright/browser-test/test-report.md正確寫入磁碟,其餘由 CI 處理。
CI 模式檢查清單:
output/playwright/browser-test/test-report.md 已寫入output/playwright/browser-test/screenshots/output/playwright/browser-test/videos/| 錯誤情境 | 處理方式 |
|---|---|
| playwright-cli 不可用 | 輸出安裝指引,中斷操作 |
| 測試 URL 不可達 | 輸出提示(啟動 dev server / 提供 URL),中斷操作 |
| 頁面載入超時 | 記錄為失敗,繼續測試下一個頁面 |
video-start 失敗 | 記錄警告,改用連續截圖模式,繼續測試 |
| 元素參考過期 | 重新 snapshot,重試操作 |
| 無法映射 URL | 記錄為「無法映射」,跳過該檔案 |
| git diff 為空 | 輸出「無變更」報告,正常結束 |
| Serena 不可用 | 降級到啟發式映射,繼續測試 |