E2E Testing dengan Playwright — Testing

Apa itu E2E Testing? End-to-End (E2E) testing menguji aplikasi dari sudut pandang user. Test membuka browser sungguhan, mengklik tombol, mengisi form, dan memve

Apa itu E2E Testing?

End-to-End (E2E) testing menguji aplikasi dari sudut pandang user. Test membuka browser sungguhan, mengklik tombol, mengisi form, dan memverifikasi hasilnya — persis seperti yang dilakukan user.

Kapan Menggunakan E2E?

Setup Playwright

# Instalasi
npm init playwright@latest

# Struktur yang dibuat:
# tests/          — folder test
# playwright.config.ts — konfigurasi
# package.json    — scripts ditambahkan

Konfigurasi Dasar

// playwright.config.ts
import { defineConfig } from "@playwright/test";

export default defineConfig({
  testDir: "./tests",
  timeout: 30000,
  use: {
    baseURL: "http://localhost:3000",
    screenshot: "only-on-failure",
  },
  projects: [
    { name: "chromium", use: { browserName: "chromium" } },
    { name: "firefox", use: { browserName: "firefox" } },
    { name: "webkit", use: { browserName: "webkit" } },
  ],
});

Locators — Menemukan Elemen

Playwright menggunakan locator yang mengikuti best practice aksesibilitas:

import { test, expect } from "@playwright/test";

test("menemukan elemen di halaman", async ({ page }) => {
  await page.goto("/");

  // Berdasarkan role (DIREKOMENDASIKAN)
  page.getByRole("button", { name: "Submit" });
  page.getByRole("heading", { name: "Selamat Datang" });
  page.getByRole("link", { name: "Masuk" });

  // Berdasarkan teks
  page.getByText("Halo Dunia");

  // Berdasarkan label form
  page.getByLabel("Email");

  // Berdasarkan placeholder
  page.getByPlaceholder("Masukkan email");

  // Berdasarkan test-id (last resort)
  page.getByTestId("submit-button");
});

Actions — Interaksi dengan Halaman

test("mengisi dan submit form login", async ({ page }) => {
  await page.goto("/login");

  // Mengisi input
  await page.getByLabel("Email").fill("[email protected]");
  await page.getByLabel("Password").fill("rahasia123");

  // Klik tombol
  await page.getByRole("button", { name: "Masuk" }).click();

  // Select dropdown
  await page.getByLabel("Kota").selectOption("jakarta");

  // Checkbox
  await page.getByLabel("Ingat saya").check();
});

Assertions — Verifikasi

test("halaman dashboard setelah login", async ({ page }) => {
  await page.goto("/login");
  await page.getByLabel("Email").fill("[email protected]");
  await page.getByLabel("Password").fill("password");
  await page.getByRole("button", { name: "Masuk" }).click();

  // Verifikasi URL
  await expect(page).toHaveURL("/dashboard");

  // Verifikasi elemen terlihat
  await expect(page.getByText("Selamat datang, Budi")).toBeVisible();

  // Verifikasi teks
  await expect(page.getByRole("heading")).toHaveText("Dashboard");

  // Verifikasi elemen tidak ada
  await expect(page.getByText("Error")).not.toBeVisible();
});

Test Generator (Codegen)

Playwright punya fitur yang merekam interaksi browser dan menghasilkan kode test secara otomatis:

# Buka codegen tool
npx playwright codegen http://localhost:3000

# Hasilnya bisa langsung di-copy ke file test

Cross-browser Testing

Playwright mendukung Chromium, Firefox, dan WebKit (Safari) dalam satu konfigurasi. Jalankan semua browser sekaligus:

# Jalankan semua browser
npx playwright test

# Jalankan browser tertentu
npx playwright test --project=chromium

# Lihat report HTML
npx playwright show-report

Yang akan kamu pelajari