Formulare und Benutzerabläufe von Anfang bis Ende testen
Automatisieren Sie mehrstufige Formularübermittlungen und Navigationsabläufe mit Playwright-Page-Objects.
Formulare und Benutzerabläufe von Anfang bis Ende testen ist eine kostenlose React Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des React Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der React Academy-Kurs umfasst insgesamt 4 Lektionen.
Strategie zum Testen von Formularen von Anfang bis Ende
E2E-Formulartests simulieren den vollständigen Ablauf aus Sicht der Nutzer: Sie rufen die Seite auf, füllen Felder aus, senden das Formular ab, behandeln Validierungsfehler und überprüfen das Erfolgsergebnis.
Page Object Model
Das Page Object Model (POM) kapselt Selektoren und Interaktionen für eine Seite in einer Klasse. Dadurch werden Tests lesbarer und Duplikate reduziert.
class LoginPage {
constructor(private page: Page) {}
async goto() { await this.page.goto('/login'); }
async fillEmail(email: string) { await this.page.getByLabel('Email').fill(email); }
async fillPassword(pw: string) { await this.page.getByLabel('Password').fill(pw); }
async submit() { await this.page.getByRole('button', { name: /log in/i }).click(); }
async getError() { return this.page.getByRole('alert').textContent(); }
}Das Page Object in Tests verwenden
Bei der Verwendung von Page Objects beschreiben Tests die Aktionen der Nutzer auf der Ebene ihrer Absicht – sie sind dadurch leicht zu lesen und zu warten.
test('successful login redirects to dashboard', async ({ page }) => {
const loginPage = new LoginPage(page);
await loginPage.goto();
await loginPage.fillEmail('alice@example.com');
await loginPage.fillPassword('password123');
await loginPage.submit();
await expect(page).toHaveURL('/dashboard');
await expect(page.getByRole('heading', { name: 'Dashboard' })).toBeVisible();
});Validierungsfehler testen
Senden Sie ungültige oder leere Daten ab und überprüfen Sie die Fehlermeldungen, die die UI anzeigt.
test('shows validation errors on empty submit', async ({ page }) => {
await page.goto('/register');
await page.getByRole('button', { name: 'Create account' }).click();
await expect(page.getByText('Email is required')).toBeVisible();
await expect(page.getByText('Password must be at least 8 characters')).toBeVisible();
});Tests für mehrstufige Formulare
Bei mehrstufigen Assistenten durchlaufen Sie jeden Schritt und überprüfen dabei, dass das Formular fortschreitet und vorherige Eingaben beibehält.
test('completes 3-step signup', async ({ page }) => {
await page.goto('/signup');
// Step 1
await page.getByLabel('First Name').fill('Alice');
await page.getByRole('button', { name: 'Next' }).click();
// Step 2
await page.getByLabel('Plan').selectOption('pro');
await page.getByRole('button', { name: 'Next' }).click();
// Step 3
await page.getByLabel('Card Number').fill('4242424242424242');
await page.getByRole('button', { name: 'Complete' }).click();
await expect(page.getByText('Welcome, Alice!')).toBeVisible();
});API in Playwright mocken
Verwenden Sie page.route(), um API-Aufrufe abzufangen und Mock-Antworten zurückzugeben – nützlich, um Sonderfälle ohne ein echtes Backend zu testen.
await page.route('/api/register', async route => {
await route.fulfill({
status: 200,
contentType: 'application/json',
body: JSON.stringify({ token: 'fake-token' }),
});
});
await page.goto('/register');
// ...fill and submit form
await expect(page).toHaveURL('/dashboard');Datei-Uploads testen
Verwenden Sie setInputFiles(), um in Playwright einen Datei-Upload zu simulieren.
test('uploads a profile photo', async ({ page }) => {
await page.goto('/profile');
const fileInput = page.getByLabel('Profile photo');
await fileInput.setInputFiles('./fixtures/avatar.png');
await page.getByRole('button', { name: 'Upload' }).click();
await expect(page.getByAltText('Profile photo')).toBeVisible();
});Auth-Status wiederverwenden
Melden Sie sich einmal an, speichern Sie den Storage-State des Browsers und verwenden Sie ihn in mehreren Tests wieder, um wiederholte Anmeldeabläufe zu überspringen.
// auth.setup.ts
test('authenticate', async ({ page }) => {
await page.goto('/login');
await page.getByLabel('Email').fill('alice@example.com');
await page.getByLabel('Password').fill('password');
await page.getByRole('button', { name: 'Log in' }).click();
await page.context().storageState({ path: 'e2e/.auth/user.json' });
});
// playwright.config.ts — use storageState in other tests
use: { storageState: 'e2e/.auth/user.json' }Fehlerbehandlung testen
Simulieren Sie Netzwerkausfälle und überprüfen Sie, dass die Nutzer den Vorgang wiederholen können oder eine hilfreiche Fehlermeldung sehen.
await page.route('/api/submit', route => route.abort());
await page.getByRole('button', { name: 'Submit' }).click();
await expect(page.getByText('Network error. Please try again.')).toBeVisible();
await page.unroute('/api/submit');
// Now the real request goes through
await page.getByRole('button', { name: 'Retry' }).click();Tastaturnavigation testen
Testen Sie, dass Formulare vollständig per Tastatur zugänglich sind, indem Sie mit der Tabulatortaste durch die Felder navigieren und das Formular mit der Eingabetaste absenden.
test('submits form with keyboard only', async ({ page }) => {
await page.goto('/contact');
await page.keyboard.press('Tab'); // focus name
await page.keyboard.type('Alice');
await page.keyboard.press('Tab'); // focus email
await page.keyboard.type('alice@example.com');
await page.keyboard.press('Tab'); // focus submit
await page.keyboard.press('Enter');
await expect(page.getByText('Message sent!')).toBeVisible();
});Fixtures für Testdaten
Verwenden Sie Playwright-Fixtures, um Setup-Logik – beispielsweise das Erstellen eines Testnutzers – sauber über mehrere Tests hinweg gemeinsam zu nutzen.
// fixtures.ts
const test = base.extend<{ testUser: User }>({
testUser: async ({}, use) => {
const user = await createTestUser();
await use(user);
await deleteTestUser(user.id);
},
});
// In a test file:
test('edits profile', async ({ page, testUser }) => {
await page.goto(`/users/${testUser.id}/edit`);
});Parallele Testausführung
Playwright führt Tests standardmäßig parallel über mehrere Worker aus. Verwenden Sie test.describe.serial nur für Tests, die in einer bestimmten Reihenfolge ausgeführt werden müssen.
Kurzer Check
Was ist der wichtigste Vorteil des Page Object Model (POM) beim E2E-Testen?
Zusammenfassung
E2E-Formulartests verwenden Page Objects für bessere Wartbarkeit, page.route() zum Mocken von APIs, setInputFiles() für Uploads und den Storage-State, um Authentifizierungssitzungen wiederzuverwenden. Testen Sie Validierung, mehrstufige Abläufe und Tastaturnavigation, um realistische Nutzerabläufe abzudecken.
Häufig gestellte Fragen
Ist die Lektion „Formulare und Benutzerabläufe von Anfang bis Ende testen“ kostenlos?
Ja — der vollständige Text von „Formulare und Benutzerabläufe von Anfang bis Ende testen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des React Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der React Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Formulare und Benutzerabläufe von Anfang bis Ende testen“?
Automatisieren Sie mehrstufige Formularübermittlungen und Navigationsabläufe mit Playwright-Page-Objects. Du übst React Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um React Academy zu starten?
Keine Vorkenntnisse erforderlich. React Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „Formulare und Benutzerabläufe von Anfang bis Ende testen“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser React Academy-Lektion Code schreiben und ausführen?
Ja. Jede React Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Integrationstests mit React Testing Library
- Asynchrone UIs und API-Aufrufe mit MSW testen
- Erste Schritte mit Playwright für React
- Formulare und Benutzerabläufe von Anfang bis Ende testen