# Playwright Test Integration
Frontend test support for ward/tools/tester.
## Features
- Discover Playwright tests (.spec.ts files)
- Execute tests with Playwright runner
- Capture video recordings and screenshots
- Stream artifacts via API endpoints
- Inline video/screenshot playback in test results
## Directory Structure
```
ward/tools/tester/
├── playwright/
│ ├── discovery.py # Find .spec.ts tests
│ ├── runner.py # Execute Playwright tests
│ └── artifacts.py # Store and serve artifacts
├── frontend-tests/ # Synced Playwright tests (gitignored)
└── artifacts/ # Test artifacts (gitignored)
├── videos/
├── screenshots/
└── traces/
```
## Test Metadata Format
Add Gherkin metadata to Playwright tests via JSDoc comments:
```typescript
/**
* Feature: Reservar turno veterinario
* Scenario: Verificar cobertura en zona disponible
* Tags: @smoke @coverage @frontend
* @description Coverage check shows message for valid address
*/
test('coverage check shows message for valid address', async ({ page }) => {
await page.goto('http://localhost:3000/turnero');
await page.fill('[name="address"]', 'Av Santa Fe 1234, CABA');
await page.click('button:has-text("Verificar")');
await expect(page.locator('.coverage-message')).toContainText('Tenemos cobertura');
});
```
## Playwright Configuration
Tests should use playwright.config.ts with video/screenshot capture:
```typescript
import { defineConfig } from '@playwright/test';
export default defineConfig({
use: {
// Capture video on failure
video: 'retain-on-failure',
// Capture screenshot on failure
screenshot: 'only-on-failure',
},
// Output directory for artifacts
outputDir: './test-results',
reporter: [
['json', { outputFile: 'results.json' }],
['html'],
],
});
```
## API Endpoints
### Stream Artifact
```
GET /tools/tester/api/artifact/{run_id}/{filename}
```
Returns video/screenshot file for inline playback.
### List Artifacts
```
GET /tools/tester/api/artifacts/{run_id}
```
Returns JSON list of all artifacts for a test run.
## Artifact Display
Videos and screenshots are displayed inline in test results:
**Video:**
```html
```
**Screenshot:**
```html
```
## Integration with Test Runner
Playwright tests are discovered alongside backend tests and can be:
- Run individually or in batches
- Filtered by Gherkin metadata (feature, scenario, tags)
- Filtered by pulse variables (role, stage, state)
## Future Enhancements
- Playwright trace viewer integration
- Test parallelization
- Browser selection (chromium, firefox, webkit)
- Mobile device emulation
- Network throttling
- Test retry logic