Communitygithub.com

Niltra/web-qa-visual

在完成網頁前,使用 Playwright CLI 驗證網站:包含主控台錯誤、失敗請求、響應式溢出(375/414/768/1280/1440)、axe 可及性、鍵盤和焦點、減少動畫、連結、SEO/中繼標籤和載入指標。在測試網站、每次重大變更後或驗證部署時使用。

web-qa-visual 是什麼?

這項技能提供了一個自動化的視覺與功能品質保證流程,專門用於網頁應用程式。它利用 Playwright CLI 在部署前對網頁進行全面檢查,涵蓋主控台錯誤、失敗的網路請求、響應式設計溢出(在多個 viewport 上)、可及性(axe-core)、鍵盤導航與焦點管理、減少動畫偏好、連結有效性、SEO/中繼標籤(標題、描述、JSON-LD 等),以及 LCP 和 CLS 等真實的載入效能指標。主要使用場景是在測試新頁面、重大重構後或驗證新部署時使用。它提供一個結構化的檢查清單,並在每次檢查執行後生成一份詳細報告,其中包含通過/失敗狀態和具體的阻礙證據(如選擇器、控制台日誌或螢幕截圖)。該設計優先透過 CLI 命令實現可重複性和速度,並強調僅根據新鮮的命令輸出做出決策,避免主觀判斷。它可以輕鬆整合到 Playwright 專案中(需要 `playwright.config.ts` 和 `@axe-core/playwright`),將結果截圖儲存在 `docs/qa/` 目錄中,並通過反覆修復和重新測試的循環流程來促進品質提升。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Niltra/agent-skills-web/tree/HEAD/skills/web-qa-visual

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

使用 Playwright CLI 進行視覺品質保證

黃金法則:沒有新鮮的命令輸出就沒有結論。拒絕「看起來應該沒問題」的說法。

最低設定

  • Playwright 作為專案的 devDependency;playwright.config.ts 中需明確設定 viewport 為 375px(不要使用 devices['Pixel 7'],因為它是 412px),並包含 desktop-chrome 和 mobile-chrome 兩個專案。
  • 截圖腳本放在 scripts/shot.mjs 中(不要為此使用 MCP:CLI 更快且更具可重複性)。
  • 為了使用 axe:需要 @axe-core/playwright。
  • 啟動正式環境的建置(npm run build && npm run start)來測量真實的效能;開發環境僅用於除錯。

每個頁面和每個地區的檢查項目

  1. 主控台與網路:page.on('console')、page.on('pageerror')、page.on('requestfailed') 以及狀態碼 ≥400 的回應。任何失敗都標記為紅色。
  2. 溢出:在每個 viewport 檢查 document.documentElement.scrollWidth <= clientWidth + 1;如果有溢出,列出導致溢出的元素(getBoundingClientRect().right > innerWidth)。
  3. 可及性:axe 不能有 critical/serious 等級的違規;唯一的 h1;所有 img[alt] 屬性完整;所有可互動元素上的焦點可見(使用真實鍵盤檢查 :focus-visible,而非僅看 CSS);Tab 順序邏輯合理。
  4. 減少動畫:使用 page.emulateMedia({ reducedMotion: 'reduce' });不得有閃爍、自動播放或持續時間超過 200ms 的動畫。
  5. 連結:提取所有 href,驗證內部連結(200),外部連結標記為僅供參考;0 個 href="#" 且無事件處理器。
  6. SEO:title、meta description、canonical、OG 標籤、每個地區的 hreflang、可解析的 JSON-LD、sitemap.xml 和 robots.txt 應回傳 200。
  7. 效能:使用 PerformanceObserver 在載入後測量 LCP/CLS;桌面版目標 LCP < 2.5s 且 CLS < 0.1;使用 rAF 在自動滾動 5 秒期間計算長任務幀(>50ms)來測量滾動抖動。
  8. Canvas/滾動:由於 canvas 在無頭模式下可能顯示為黑色,請通過 DOM 驗證:檢查預期的 opacity/transform 元素、在正確範圍內的節拍文字是否存在且可見,以及狀態是否暴露在 window 中(如果存在的話)。

迭代循環

  • 每次執行後:生成一份報告,包含表格(檢查項目/命令/結果/狀態)以及帶有證據(選擇器、日誌或截圖)的阻礙項目列表。
  • 如果某個檢查項目失敗:修復它(修改自己的測試/腳本)或提出具體的 src/ 修正方案並附上證據;然後重複整個循環。
  • 將帶有日期的截圖儲存在 docs/qa/ 中(主要地區的桌面版 + 行動版),並作為基線用於比較回歸。
  • 任何檢查項目為紅色或尚未執行時,不得宣告「就緒」。

誠實的限制

  • 無法從無頭模式驗證真實 iOS 上的幀序列:請在報告中註明這一點。
  • 透過 npx lighthouse 使用 Lighthouse 是可選的,但在正式環境建置中建議使用;如果無法執行,請直接說明,不要估算。

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

相關技能