Playwright Academy
0 dari 17
Fase 4 · Level ProModul 16 dari 17

AI & MCP

Playwright MCP dan Test Agents (planner, generator, healer) untuk menjelajah, membuat test, dan memperbaikinya.

Dengan Playwright MCP, AI agent bisa membaca isi halaman dan mengklik, mengetik, atau pindah halaman sendiri, sehingga bisa menjelajah aplikasi sebelum menulis test.

Di dunia QA

AI agent dengan Playwright MCP seperti rekan tester baru yang cepat menjelajah aplikasi dan menulis draf test case. Kamu tetap reviewer-nya: cek apakah skenario dan expected result-nya benar.

Apa itu MCP?

Model Context Protocol adalah standar terbuka (dirintis Anthropic) yang menyamakan cara aplikasi AI tersambung ke tool dan data. Satu server MCP bisa dipakai banyak aplikasi AI.

Kamu
memberi instruksi
AI agent
Claude Code
Playwright MCP
navigate, click, snapshot
Browser + aplikasimu

Playwright MCP membaca halaman lewat accessibility snapshot, bukan screenshot: daftar role dan nama setiap elemen, sama seperti yang dipakai get_by_role. Hasilnya lebih cepat, hemat, dan tepat.

Menginstall Playwright MCP

Kalau kamu memakai Claude Code, daftarkan Playwright MCP sekali di level user, supaya bisa dipakai di semua project:

bash
# Windows: npx dibungkus `cmd /c` karena npx adalah script
claude mcp add playwright --scope user -- cmd /c npx -y @playwright/mcp@latest

# macOS dan Linux
claude mcp add playwright --scope user -- npx -y @playwright/mcp@latest

# Mengecek status
claude mcp list
claude mcp get playwright  # cek Playwright MCP sudah terdaftar

Di sesi Claude Code yang baru, AI otomatis punya tool seperti browser_navigate, browser_snapshot, browser_click, browser_type, browser_fill_form, browser_take_screenshot, dan browser_network_requests.

Server yang sama juga bisa dipakai di VS Code (GitHub Copilot), Cursor, Claude Desktop, dan lainnya, biasanya dengan pengaturan JSON seperti ini:

json
{
  "mcpServers": {
    "playwright": {
      "command": "npx",
      "args": ["@playwright/mcp@latest"]
    }
  }
}

Workflow 1: Eksplorasi aplikasi

Sebelum menulis test, minta AI berkeliling dulu dan membuat daftar skenario. Contoh prompt-nya:

Pakai Playwright MCP. Buka https://playground.aminhamzah.com/login-toko.html,
login sebagai customer / rahasia123, lalu jelajahi halaman toko.

Buat daftar skenario test yang penting (positif dan negatif) untuk fitur
pencarian, filter kategori, keranjang, dan checkout. Untuk setiap skenario
tulis: judul, langkah singkat, hasil yang diharapkan, dan prioritas (P1/P2/P3).
Jangan menulis kode dulu.

Workflow 2: Membuat test yang berkualitas

Prompt yang bagus menyebut kondisi project dan aturan mainnya, termasuk perintah untuk mengecek hasilnya.

Pakai Playwright MCP untuk menjelajahi bagian "5. Konten dinamis" di
https://playground.aminhamzah.com/arena.html, lalu tulis test pytest baru di
tests/academy/test_m16_ai_generated.py.

Aturan:
- Ikuti gaya test yang sudah ada di tests/academy (baca dulu 2 contoh).
- Locator prioritas get_by_role / get_by_label; hindari CSS dan XPath.
- Pola Arrange, Act, Assert; nama test menjelaskan perilaku.
- Pakai expect(), DILARANG time.sleep / wait_for_timeout.
- Setelah menulis, jalankan `uv run pytest tests/academy/test_m16_ai_generated.py`
  dan perbaiki sampai hijau. Tunjukkan hasil akhirnya.
Pakai Playwright MCP untuk menjelajahi bagian "5. Konten dinamis" di
https://playground.aminhamzah.com/arena.html, lalu tulis test baru di
tests/academy/m16-ai-generated.spec.ts.

Aturan:
- Ikuti gaya test yang sudah ada di tests/academy (baca dulu 2 contoh).
- Locator prioritas getByRole / getByLabel; hindari CSS dan XPath.
- Pola Arrange, Act, Assert; nama test menjelaskan perilaku.
- Pakai web-first assertion, DILARANG waitForTimeout.
- Setelah menulis, jalankan `npx playwright test m16-ai-generated --project=chromium`
  dan perbaiki sampai hijau. Tunjukkan hasil akhirnya.

Contoh hasil yang pantas diterima setelah kamu periksa:

from playwright.sync_api import Page, expect  # Page dan expect

ARENA = "/arena.html"  # halaman latihan interaksi


def test_muat_data_menampilkan_tiga_laporan(page: Page) -> None:  # nama test menjelaskan perilakunya
    page.goto(ARENA)  # buka Arena

    page.get_by_role("button", name="Muat data").click()  # data muncul 1,5 detik kemudian

    expect(page.get_by_role("status").filter(has_text="Data berhasil dimuat")).to_be_visible()  # pesan sukses terlihat
    expect(page.get_by_test_id("loaded-list").get_by_role("listitem")).to_have_text(  # isi daftar sesuai urutan
        ["Laporan Januari", "Laporan Februari", "Laporan Maret"]
    )
import { test, expect } from '@playwright/test'; // test dan expect

const ARENA = '/arena.html'; // halaman latihan interaksi

test('muat data menampilkan tiga laporan', async ({ page }) => { // nama test menjelaskan perilakunya
  await page.goto(ARENA);

  await page.getByRole('button', { name: 'Muat data' }).click(); // data muncul 1,5 detik kemudian

  await expect(page.getByRole('status').filter({ hasText: 'Data berhasil dimuat' })).toBeVisible(); // pesan sukses terlihat
  await expect(page.getByTestId('loaded-list').getByRole('listitem')).toHaveText([ // isi daftar sesuai urutan
    'Laporan Januari', 'Laporan Februari', 'Laporan Maret',
  ]);
});

Workflow 3: Self-healing (memperbaiki test yang rusak)

Saat tampilan berubah dan test jadi gagal, AI bisa membantu mencari penyebabnya:

Test `test_login_berhasil` di tests/academy/test_m10_pom.py gagal
setelah redesign. Ini pesan error-nya: <tempel error>.

Pakai Playwright MCP untuk membuka halaman login dan periksa struktur
terbarunya. Jelaskan PENYEBABNYA dulu, apakah bug aplikasi atau locator usang?
Kalau locator usang, perbaiki di page object (pages/login_page.py), BUKAN di test.
Jalankan ulang test dan tunjukkan diff-nya.

Playwright Test Agents: planner, generator, healer

Sejak versi 1.56, Playwright punya tiga agent resmi: merencanakan, menulis, dan memperbaiki test. Masing-masing memakai MCP khusus Playwright Test, jadi bisa membuka browser, menjalankan test, dan membaca hasilnya.

AgentTugasnyaHasilnya
plannerMenjelajah aplikasi dan menyusun skenario testRencana test (Markdown) di specs/
generatorMengubah rencana jadi kode, sambil mengecek locator dan assertion langsung di browserFile test di tests/
healerMenjalankan test yang gagal, memeriksa halaman, lalu memperbaiki testPerubahan kode test beserta penjelasannya

Menginstall agent

TypeScript
cd playwright-typescript  # masuk ke folder project
npx playwright init-agents --loop=claude  # pasang agent planner, generator, dan healer untuk Claude Code

Pilihan --loop lainnya: codex, copilot, opencode, dan vscode. Perintah di atas membuat file-file berikut:

playwright-typescript/
├─ .claude/agents/
│  ├─ playwright-test-planner.md     ← definisi agent untuk Claude Code
│  ├─ playwright-test-generator.md
│  └─ playwright-test-healer.md
├─ .mcp.json                         ← server MCP "playwright-test" (npx playwright run-test-mcp-server)
├─ specs/README.md                   ← tempat rencana test dalam Markdown
└─ tests/seed.spec.ts                ← "seed test": kondisi awal yang dipakai agent

Seed test memberi tahu agent harus mulai dari mana. Bawaannya kosong. Isi seperti contoh ini supaya agent mulai dari halaman login TokoQA:

tests/seed.spec.tsLulus test
Memuat tests/seed.spec.ts…
npx playwright test seed --project=chromium

Alur kerjanya di Claude Code

Buka sesi Claude Code di folder project-mu (supaya .claude/agents dan .mcp.json terbaca), lalu panggil agent satu per satu:

1. Pakai agent playwright-test-planner. Buat rencana test untuk fitur kupon di halaman
   checkout TokoQA: kupon valid, kupon kedaluwarsa, kupon tidak ada, dan kupon yang belum
   memenuhi minimal belanja. Simpan di specs/kupon.md.

2. Pakai agent playwright-test-generator. Ubah specs/kupon.md menjadi test di
   tests/academy/kupon.spec.ts. Ikuti gaya test yang sudah ada dan pakai page object di pages/.

3. Pakai agent playwright-test-healer. Jalankan tests/academy/kupon.spec.ts dan perbaiki
   test yang gagal. Jelaskan dulu penyebabnya sebelum mengubah kode.

Untuk Python: Test Agents menghasilkan test TypeScript (Playwright Test). Tapi rencana dari planner berupa Markdown biasa, jadi tetap bisa dipakai. Minta planner menulis specs/kupon.md, lalu minta Claude Code (dengan Playwright MCP) menulis versi pytest-nya di folder tests/, mengikuti cara di Workflow 2 di atas.

Koreksi rencana di specs/ sebelum menjalankan generator. Satu baris skenario yang salah jauh lebih mudah diperbaiki daripada sepuluh test yang terlanjur dibuat darinya.

Aturan main saat dibantu AI

LakukanJangan
Periksa setiap baris kode yang dihasilkanLangsung menerima kode apa adanya
Jalankan test, lalu pastikan test bisa gagal saat aplikasinya rusakPercaya test hijau tanpa bukti
Berikan konteks: contoh test, aturan penulisan, struktur folderPrompt satu kalimat "buatkan test"
Minta AI menjelaskan alasan perubahannyaMembiarkan AI "memperbaiki" dengan melonggarkan assertion
Pakai data dan akun latihanMemberikan password produksi atau data pelanggan ke AI
Test akhirnya selalu memberi hasil yang sama, tanpa AI saat dijalankanTest yang memanggil AI setiap kali dijalankan
Hati-hati dengan "self-healing" yang terlalu rajin

Kalau tombol "Bayar" hilang karena bug, AI bisa "memperbaiki" test dengan mengklik tombol lain, dan bug-nya lolos. Setiap perbaikan dari AI harus dicek: perubahan tampilan yang disengaja, atau bug?

Lebih jauh (opsional)Trik komunitas
  • CLAUDE.md di root repository berisi aturan test timmu: struktur folder, aturan locator, dan perintah menjalankan test. Agent membacanya di setiap sesi, jadi kamu tidak perlu mengulang aturan yang sama di setiap prompt.
  • Pilihan Playwright MCP: --headless untuk jalan tanpa jendela, --isolated supaya profil browser tidak disimpan, --browser untuk memilih browser.
  • "Copy prompt" di HTML report (Modul 12) adalah cara cepat menceritakan kegagalan test ke agent.
  • Satu agent, satu tugas: pisahkan tahap menjelajah, menulis test, dan memperbaiki. Itulah ide di balik agent planner, generator, dan healer.

Latihan

Latihan 1

Pastikan Playwright MCP tersedia

Di terminal folder project-mu (playwright-python atau playwright-typescript), tampilkan daftar MCP yang terdaftar di Claude Code.

Hasilplaywright muncul di daftar dengan status terhubung

Latihan 2

Minta AI menjelajah TokoQA

Jalankan prompt Workflow 1 untuk TokoQA, simpan daftar skenarionya, lalu tandai mana yang sudah ada di project-mu dan mana yang baru.

Hasilminimal 8 skenario, termasuk untuk peran customer dan admin

Latihan 3

Minta AI menulis test dengan network mocking

Jalankan prompt Workflow 2 untuk jurus "14. Data dari API" di Arena, termasuk satu test dengan network mocking. Periksa hasilnya dengan tabel aturan main di atas.

Hasiltest memakai page.route, tanpa sleep, dan lulus

Latihan 4

Buktikan test buatan AI bisa gagal

Ubah sementara data mock menjadi {"total": 1, "data": [{"id": 1, "name": "Keyboard Mekanik", "price": 750000}]}, jalankan test-nya, lalu kembalikan.

Hasiltest gagal saat data mock diubah, lalu lulus lagi setelah dikembalikan