- Add @playwright/test as dev dependency - Create playwright.config.ts with Chrome-only testing config - Add npm scripts: test:record, test:e2e, test:replay - Create 13 test recordings covering: - 2-player and 3-player games - 8-ball, 9-ball, and 10-ball game types - Various race-to values (1, 3, 5, 7, 9) and "endlos" mode - Both wechselbreak (alternating) and winnerbreak rules - Fix Infinity handling in gameService.ts and NewGameScreen.tsx - Parse "endlos" and "Infinity" strings as Infinity number - Properly serialize Infinity as string in form data - Increase GameDetail score font size from 20vh to 40vh - Update README.md with testing documentation: - Quick start guide for recording and running tests - Move E2E testing from "Future Improvements" (now implemented) - Add comprehensive tests/recordings/README.md documentation Purpose: Establishes browser automation testing infrastructure with real workflow recordings, enabling regression testing and interaction documentation for all game configuration combinations.
26 lines
1.7 KiB
TypeScript
26 lines
1.7 KiB
TypeScript
import { test, expect } from '@playwright/test';
|
|
|
|
test('test', async ({ page }) => {
|
|
await page.goto('http://localhost:3000/');
|
|
await page.getByRole('button', { name: 'Neues Spiel starten' }).click();
|
|
await page.getByRole('textbox', { name: 'Name Spieler' }).click();
|
|
await page.getByRole('textbox', { name: 'Name Spieler' }).fill('Foo');
|
|
await page.getByRole('button', { name: 'Weiter' }).click();
|
|
await page.getByRole('textbox', { name: 'Name Spieler' }).click();
|
|
await page.getByRole('textbox', { name: 'Name Spieler' }).fill('Bar');
|
|
await page.getByRole('button', { name: 'Weiter' }).click();
|
|
await page.getByRole('button', { name: 'Überspringen' }).click();
|
|
await page.getByRole('button', { name: '8-Ball' }).click();
|
|
await page.getByRole('button', { name: 'Endlos' }).click();
|
|
await page.getByRole('button', { name: 'Break-Regel wählen: Winnerbreak' }).click();
|
|
await page.getByRole('button', { name: 'Zuerst: Foo' }).click();
|
|
await page.getByRole('button', { name: 'Aktueller Punktestand für Foo' }).click();
|
|
await page.getByRole('button', { name: 'Aktueller Punktestand für Bar' }).click();
|
|
await page.getByRole('button', { name: 'Aktueller Punktestand für Foo' }).click();
|
|
await page.getByRole('button', { name: 'Aktueller Punktestand für Bar' }).click();
|
|
await page.getByRole('button', { name: 'Aktueller Punktestand für Foo' }).click();
|
|
await page.getByRole('button', { name: 'Aktueller Punktestand für Foo' }).click();
|
|
await page.getByRole('button', { name: 'Aktueller Punktestand für Foo' }).click();
|
|
await page.getByRole('button', { name: 'Spiel beenden' }).click();
|
|
await page.getByRole('button', { name: 'Bestätigen' }).click();
|
|
}); |