Lomakkeiden ja käyttäjäpolkujen päästä päähän -testaus
Automatisoikaa monivaiheiset lomakelähetykset ja navigointipolut Playwrightin page-objekteilla.
Lomakkeiden ja käyttäjäpolkujen päästä päähän -testaus on ilmainen React Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu React Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. React Academy-kurssilla on yhteensä 4 oppituntia.
Lomakkeiden E2E-testausstrategia
E2E-lomaketestit simuloivat käyttäjän koko matkan: sivulle siirtymisen, kenttien täyttämisen, lähettämisen, validointivirheiden käsittelyn ja onnistuneen lopputuloksen tarkistamisen.
Page Object -malli
Page Object -malli (POM) kapseloi sivun paikantimet ja toiminnot luokkaan, mikä tekee testeistä luettavampia ja vähentää toistoa.
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(); }
}Page Objectin käyttäminen testeissä
Page Objecteja käyttämällä testeistä tulee käyttäjän toimia tarkoituksen tasolla kuvaavia kuvauksia, joita on helppo lukea ja ylläpitää.
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();
});Validointivirheiden testaaminen
Lähettäkää lomake virheellisillä tai tyhjillä tiedoilla ja tarkistakaa käyttöliittymän näyttämät virheilmoitukset.
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();
});Monivaiheisen lomakkeen testaaminen
Siirtykää monivaiheisissa ohjatuissa lomakkeissa jokaisen vaiheen läpi ja tarkistakaa, että lomake etenee ja säilyttää aiemmin syötetyt tiedot.
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();
});APIn mockaaminen Playwrightissa
Käyttäkää page.route()-metodia API-kutsujen sieppaamiseen ja mock-vastausten palauttamiseen. Näin voitte testata poikkeustilanteita ilman oikeaa taustajärjestelmää.
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');Tiedostojen lataamisen testaaminen
Käyttäkää setInputFiles()-metodia tiedoston lataamisen simulointiin Playwrightissa.
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();
});Todennustilan uudelleenkäyttö
Kirjautukaa kerran, tallentakaa selaimen tallennustila ja käyttäkää sitä testeissä uudelleen, jotta toistuvia kirjautumisvaiheita ei tarvitse suorittaa.
// 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' }Virheistä palautumisen testaaminen
Simuloikaa verkkoyhteyden häiriöitä ja varmistakaa, että käyttäjä voi yrittää uudelleen tai näkee hyödyllisen virheilmoituksen.
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();Näppäimistönavigoinnin testaaminen
Testatkaa, että lomakkeet ovat täysin näppäimistöllä käytettäviä siirtymällä sarkaimella kentästä toiseen ja lähettämällä lomake Enter-näppäimellä.
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();
});Testidatan fixturet
Käyttäkää Playwrightin fixturejä jakamaan alustamislogiikka, kuten testikäyttäjän luominen, siististi useiden testien kesken.
// 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`);
});Testien rinnakkainen suorittaminen
Playwright suorittaa testit oletusarvoisesti rinnakkain eri työprosesseissa. Käyttäkää test.describe.serial-määritystä vain testeihin, jotka on suoritettava järjestyksessä.
Pikatarkistus
Mikä on Page Object -mallin (POM) tärkein hyöty E2E-testauksessa?
Kertaus
E2E-lomaketesteissä käytetään Page Objecteja ylläpidettävyyden parantamiseen, page.route()-metodia APIn mockaamiseen, setInputFiles()-metodia latauksiin ja tallennustilaa todennettujen istuntojen uudelleenkäyttöön. Testatkaa validointi, monivaiheiset työnkulut ja näppäimistönavigointi, jotta käyttäjän todelliset työnkulut tulevat katetuiksi.
Opi React tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 88
- Oppitunnit
- 324
Usein kysytyt kysymykset
Onko oppitunti ”Lomakkeiden ja käyttäjäpolkujen päästä päähän -testaus” ilmainen?
Kyllä – oppitunnin ”Lomakkeiden ja käyttäjäpolkujen päästä päähän -testaus” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko React Academy-kurssin, päivitä CoddyKit PROhon. React Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Lomakkeiden ja käyttäjäpolkujen päästä päähän -testaus”?
Automatisoikaa monivaiheiset lomakelähetykset ja navigointipolut Playwrightin page-objekteilla. Harjoittelet React Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni React Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin React Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.
Kuinka kauan ”Lomakkeiden ja käyttäjäpolkujen päästä päähän -testaus”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä React Academy-oppitunnilla?
Kyllä. Jokainen React Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Integraatiotestaus React Testing Librarylla
- Asynkronisen käyttöliittymän ja API-kutsujen testaus MSW:llä
- Playwrightin perusteet Reactille
- Lomakkeiden ja käyttäjäpolkujen päästä päähän -testaus