Skip to main content

browser-qa

Browser-based QA and autonomous verification — Playwright, Chrome DevTools MCP, Computer Use for visual testing, pixel verification, funnel walkthroughs, and overcoming web UI blockers

Zur Installation springen

Quellinformationen

Repository
DojoCodingLabs/GTM-Engineering-Command-Center
Letzte Quellaktivität
15. April 2026 um 02:19
Erkannte Sprache von SKILL.md
Englisch
Sterne
2
Forks
0

Installationsoptionen

Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.

Quelldateien prüfen

Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.

Datei-Explorer
3 Dateien

SKILL.md wird angezeigt

SKILL.md
Quellanweisungen · Schreibgeschützte Vorschau
name
browser-qa
description
Browser-based QA and autonomous verification — Playwright, Chrome DevTools MCP, Computer Use for visual testing, pixel verification, funnel walkthroughs, and overcoming web UI blockers
# Browser QA & Autonomous Verification This skill enables the GTM agent to **see, interact with, and verify** real browser experiences. The agent uses browser tools to QA its own work, verify tracking fires correctly, test signup flows end-to-end, and overcome blockers that have no CLI/API path. ## Tool Hierarchy (Pick the Right Tool) Always use the most efficient tool for the job: | Task | Tool | Why | |------|------|-----| | Verify pixel fires, check network requests | Playwright (headless) | Fast, scriptable, can inspect network layer | | Visual screenshot comparison | Playwright screenshot + Read | Headless, pixel-perfect, no setup overhead | | Test full signup/checkout flow | Playwright end-to-end | Automated form filling, navigation, assertions | | Interact with web UIs that block API access | Computer Use (mcp__computer-use__*) | Click real buttons, fill real forms, handle OAuth popups | | Inspect live DOM, console errors, performance | Playwright evaluate + console | Access to browser APIs, performance metrics | | Verify mobile responsiveness | Playwright with viewport override | Test at 375px, 390px, 768px | | Read what's on screen when other tools fail | Computer Use screenshot | Last resort visual inspection | ## Playwright Patterns ### Verify Meta Pixel Fires ```javascript // Navigate to landing page and intercept network requests const pixelRequests = []; page.on('request', req => { if (req.url().includes('facebook.com/tr')) pixelRequests.push(req); }); await page.goto(landingUrl); // Check PageView fired const pageViewFired = pixelRequests.some(r => r.url().includes('ev=PageView')); // Simulate signup and check CompleteRegistration await page.fill('[data-testid="email-input"]', 'test@example.com'); await page.click('[data-testid="signup-button"]'); const regFired = pixelRequests.some(r => r.url().includes('ev=CompleteRegistration')); ``` ### Verify PostHog Events ```javascript // Intercept PostHog capture calls const posthogEvents = []; page.on('request', req => { if (req.url().includes('/e/') || req.url().includes('/capture')) { try { const body = JSON.parse(req.postData()); posthogEvents.push(...(body.batch || [body])); } catch {} } }); await page.goto(url); // Check specific event fired const hasEvent = posthogEvents.some(e => e.event === '$pageview'); ``` ### Test Landing Page Performance ```javascript // Get Core Web Vitals const metrics = await page.evaluate(() => { return new Promise(resolve => { new PerformanceObserver(list => { const entries = {}; list.getEntries().forEach(e => entries[e.name] = e.value || e.startTime); resolve(entries); }).observe({ type: 'largest-contentful-paint', buffered: true }); }); }); // LCP should be < 2.5s for good score ``` ### Screenshot Mobile Viewports ```javascript // Test critical viewports const viewports = [ { width: 375, height: 812, name: 'iPhone SE' }, { width: 390, height: 844, name: 'iPhone 14' }, { width: 768, height: 1024, name: 'iPad' }, { width: 1440, height: 900, name: 'Desktop' } ]; for (const vp of viewports) { await page.setViewportSize({ width: vp.width, height: vp.height }); await page.goto(url); await page.screenshot({ path: `.gtm/qa/${vp.name}.png`, fullPage: true }); } ``` ### Verify UTM Parameters Persist Through Signup ```javascript // Land with UTMs await page.goto(url + '?utm_source=meta&utm_medium=paid&utm_campaign=test'); // Complete signup flow await page.click('[data-testid="signup-cta"]'); // Check UTMs are stored const storedUtm = await page.evaluate(() => { return localStorage.getItem('utm_params') || sessionStorage.getItem('utm_params'); }); ``` ## Computer Use Patterns Use Computer Use (mcp__computer-use__*) when you need to interact with native apps or web UIs that resist automation: ### When to Use Computer Use 1. **Meta Business Manager** — OAuth flows, app mode toggles, account settings that have no API 2. **Google Ads Manager** — Manual campaign review, settings that require UI interaction 3. **Vercel Dashboard** — Redeploy, check env vars, review deployment logs 4. **Email provider dashboards** — Check deliverability reports, domain verification 5. **Any web UI that blocks programmatic access** — OAuth popups, CAPTCHA flows, 2FA ### Computer Use Workflow ``` 1. request_access — List applications needed (Chrome, Safari, etc.) 2. screenshot — See current state before acting 3. left_click / type / key — Interact with UI elements 4. screenshot — Verify action completed 5. Repeat until goal achieved ``` ### Important Computer Use Rules - Chrome is **read-only tier** — can screenshot but not click/type. Use Playwright for Chrome interaction. - For web forms: prefer Playwright. Use Computer Use only for native app UIs or OAuth flows. - Always screenshot BEFORE and AFTER actions to verify state. - If a browser shows a CAPTCHA or 2FA prompt, ask the user to complete it — don't try to bypass. ## QA Verification Checklist After any GTM asset deployment (landing page, email, ad), run this verification: ### Landing Page QA - [ ] Page loads in < 3 seconds (LCP) - [ ] No console errors on load - [ ] Meta Pixel PageView fires (check network requests) - [ ] PostHog $pageview captures (check /e/ or /capture requests) - [ ] UTM parameters are captured and stored - [ ] CTA button is visible and clickable - [ ] Mobile responsive at 375px (no horizontal scroll, CTA visible) - [ ] OG meta tags present (og:title, og:description, og:image) - [ ] Signup flow completes without errors - [ ] CompleteRegistration event fires on signup ### Email QA - [ ] Template renders correctly (preview via provider API or browser) - [ ] Links point to correct URLs with UTM parameters - [ ] Unsubscribe link works - [ ] Images load (not blocked, correct dimensions) - [ ] Subject line and preview text are set ### Ad Creative QA - [ ] Landing URL resolves (no 404) - [ ] UTM parameters are in the landing URL - [ ] Pixel fires on the landing page - [ ] Landing page matches ad angle/messaging ### Tracking QA (Cross-Channel) - [ ] Meta Pixel events fire for each funnel step - [ ] PostHog events fire for each funnel step - [ ] Event IDs match between Pixel and CAPI (deduplication) - [ ] Stripe checkout includes attribution metadata - [ ] GA4 events fire (if configured) ## Overcoming Blockers The QA agent should NEVER report "I can't do this because there's no API." Instead: 1. **Try the API/CLI first** — fastest path 2. **Try Playwright** — headless browser automation 3. **Try Chrome DevTools MCP** — if available, for DOM inspection 4. **Try Computer Use** — for native UI interaction 5. **Try web scraping** — WebFetch for read-only data 6. **Only then ask the user** — as absolute last resort, with a specific ask (not vague "help me") The agent should always exhaust all available tools before asking for human help.
Auf GitHub ansehen