Menguji Formulir & Alur Pengguna dari Awal hingga Akhir
Otomatiskan pengiriman formulir bertahap dan alur navigasi dengan objek halaman Playwright.
Menguji Formulir & Alur Pengguna dari Awal hingga Akhir adalah pelajaran React Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar React Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus React Academy mencakup 4 pelajaran total.
Strategi Pengujian Formulir Ujung ke Ujung
Pengujian formulir E2E menyimulasikan seluruh perjalanan pengguna: membuka halaman, mengisi bidang, mengirimkan formulir, menangani kesalahan validasi, dan memverifikasi hasil keberhasilan.
Model Objek Halaman
Model Objek Halaman (POM) merangkum pencari elemen dan interaksi untuk suatu halaman ke dalam sebuah kelas, sehingga pengujian lebih mudah dibaca dan duplikasi berkurang.
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(); }
}Menggunakan Objek Halaman dalam Pengujian
Dengan menggunakan objek halaman, pengujian menjadi deskripsi tindakan pengguna pada tingkat maksud—mudah dibaca dan dipelihara.
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();
});Menguji Kesalahan Validasi
Kirimkan data yang tidak valid atau kosong, lalu verifikasi pesan kesalahan yang ditampilkan antarmuka pengguna.
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();
});Pengujian Formulir Multi-Langkah
Untuk panduan multi-langkah, lanjutkan melalui setiap langkah sambil memverifikasi bahwa formulir berlanjut dan mempertahankan masukan sebelumnya.
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();
});Membuat Tiruan API di Playwright
Gunakan page.route() untuk mencegat panggilan API dan mengembalikan respons tiruan—berguna untuk menguji kasus khusus tanpa backend nyata.
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');Menguji Pengunggahan Berkas
Gunakan setInputFiles() untuk menyimulasikan pengunggahan berkas di Playwright.
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();
});Penggunaan Ulang Keadaan Autentikasi
Masuk sekali, simpan keadaan penyimpanan peramban, lalu gunakan kembali keadaan tersebut di berbagai pengujian untuk melewati alur masuk yang berulang.
// 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' }Menguji Pemulihan dari Kesalahan
Simulasikan kegagalan jaringan dan verifikasi bahwa pengguna dapat mencoba lagi atau melihat pesan kesalahan yang membantu.
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();Pengujian Navigasi Papan Ketik
Uji apakah formulir sepenuhnya dapat diakses melalui papan ketik dengan berpindah antarbidang menggunakan Tab dan mengirimkan formulir dengan Enter.
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();
});Perlengkapan untuk Data Pengujian
Gunakan perlengkapan Playwright untuk membagikan logika penyiapan, seperti membuat pengguna pengujian, secara rapi di beberapa pengujian.
// 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`);
});Eksekusi Pengujian Paralel
Playwright menjalankan pengujian secara paralel secara bawaan di berbagai pekerja. Gunakan test.describe.serial hanya untuk pengujian yang harus dijalankan secara berurutan.
Cek Singkat
Apa manfaat utama Model Objek Halaman (POM) dalam pengujian E2E?
Ringkasan
Pengujian formulir E2E menggunakan Objek Halaman agar mudah dipelihara, page.route() untuk membuat tiruan API, setInputFiles() untuk pengunggahan, dan keadaan penyimpanan untuk menggunakan kembali sesi autentikasi. Uji validasi, alur multi-langkah, dan navigasi papan ketik untuk mencakup perjalanan pengguna nyata.
Belajar React dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 88
- Pelajaran
- 324
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Menguji Formulir & Alur Pengguna dari Awal hingga Akhir” gratis?
Ya — teks lengkap “Menguji Formulir & Alur Pengguna dari Awal hingga Akhir” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus React Academy, upgrade ke CoddyKit PRO. Kursus React Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Menguji Formulir & Alur Pengguna dari Awal hingga Akhir”?
Otomatiskan pengiriman formulir bertahap dan alur navigasi dengan objek halaman Playwright. Kamu berlatih React Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai React Academy?
Tidak diperlukan pengalaman sebelumnya. React Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Menguji Formulir & Alur Pengguna dari Awal hingga Akhir” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran React Academy ini?
Ya. Setiap pelajaran React Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Pengujian Integrasi dengan React Testing Library
- Menguji UI Asinkron & Pemanggilan API dengan MSW
- Memulai dengan Playwright untuk React
- Menguji Formulir & Alur Pengguna dari Awal hingga Akhir