skills-ws
Version:
87 agent skills for AI coding assistants — marketing, growth, web3, dev, design & operations. Built for OpenClaw, Claude Code, Cursor, and Codex.
94 lines (76 loc) • 2.71 kB
Markdown
## Contents
- Visual Regression Testing
- Playwright Screenshot Comparisons
- Percy Integration (Cross-Browser Visual Testing)
- Chromatic (Storybook Visual Testing)
- Threshold Tuning Rules
## Visual Regression Testing
### Playwright Screenshot Comparisons
```typescript
// playwright.config.ts
import { defineConfig } from '@playwright/test';
export default defineConfig({
expect: {
toHaveScreenshot: {
maxDiffPixelRatio: 0.01, // allow 1% pixel diff
threshold: 0.2, // per-pixel color threshold (0-1)
animations: 'disabled', // freeze animations
},
},
});
// tests/visual.spec.ts
test('homepage visual regression', async ({ page }) => {
await page.goto('/');
// readiness via web-first assertion, not waitForLoadState('networkidle') (discouraged for tests)
await expect(page.getByRole('heading', { name: 'Welcome' })).toBeVisible();
await expect(page).toHaveScreenshot('homepage.png', {
fullPage: true,
mask: [page.locator('.dynamic-timestamp')], // mask flaky elements
});
});
// Component-level screenshot
test('pricing card renders correctly', async ({ page }) => {
await page.goto('/pricing');
const card = page.locator('[data-testid="pro-plan"]');
await expect(card).toHaveScreenshot('pro-plan-card.png');
});
```
```bash
# Update baselines after intentional changes
npx playwright test --update-snapshots
# Run only visual tests
npx playwright test tests/visual/
```
### Percy Integration (Cross-Browser Visual Testing)
```typescript
// Install: npm i -D @percy/cli @percy/playwright
import { percySnapshot } from '@percy/playwright';
test('checkout flow visual', async ({ page }) => {
await page.goto('/checkout');
await page.fill('#email', 'test@example.com');
await percySnapshot(page, 'Checkout - Email Filled', {
widths: [375, 768, 1280], // test responsive breakpoints
minHeight: 1024,
});
});
```
```yaml
# CI: Percy runs
- run: npx percy exec -- npx playwright test tests/visual/
env:
PERCY_TOKEN: ${{ secrets.PERCY_TOKEN }}
```
### Chromatic (Storybook Visual Testing)
```bash
npm i -D chromatic
# Token from the CI secret store, never committed:
npx chromatic --project-token="$CHROMATIC_PROJECT_TOKEN"
# CI: runs on every push, compares against baseline branch
```
### Threshold Tuning Rules
| Scenario | maxDiffPixelRatio | threshold | Notes |
|----------|-------------------|-----------|-------|
| Pixel-perfect UI | 0.001 | 0.1 | Tight — catches font rendering diffs |
| General pages | 0.01 | 0.2 | Balanced default |
| Data-heavy pages | 0.05 | 0.3 | Loose — dynamic content |
**Tip:** Mask timestamps, avatars, and animated elements. Use `animations: 'disabled'` globally.