Bahasa dan laptop dipilih di dua langkah terpisah paling atas, lalu setiap alat punya langkah klik demi klik. Perintah terminal hanya untuk mengecek versi dan membuat project.
1Pilih bahasa
Semua contoh kode di Academy mengikuti pilihan ini.
2Pilih laptopmu
Langkah install mengikuti sistem operasi ini. Terdeteksi otomatis, bisa diganti.
3Install tiga alat
Unduh dari situs resminya, lalu install seperti aplikasi biasa. Setelah ketiganya terpasang, buka VS Code, klik menu Terminal > New Terminal, lalu cek satu per satu.
Klik Next di setiap layar, pilihan bawaan sudah tepat.
Klik Install, lalu Finish.
Buka terminal VS Code.
Ketik git --version, lalu tekan Enter.
Kalau Git belum ada, muncul jendela Command Line Tools.
Klik Install, lalu Agree.
Tunggu sampai selesai, lalu klik Done.
Buka git-scm.com/downloads.
Klik Linux/Unix.
Cari distro yang kamu pakai.
Ikuti perintah install di halaman itu.
Cek versinya (kotak di bawah).
Cek di terminal VS Code
> git --version
git version 2.5x
Satu perintah yang tersisa: uv
uv mengurus paket dan project Python. uv tidak punya installer berbentuk aplikasi, jadi diinstall dengan satu perintah setelah Python terpasang:
Python
# Install uv memakai pip, pengunduh paket bawaan Python (macOS dan Linux: ketik pip3)pip install uv# Cek versi uvuv--version
Terakhir, di VS Code klik ikon Extensions (empat kotak) di panel kiri, cari Python, lalu klik Install pada ekstensi buatan Microsoft.
Ekstensi VS Code
Di VS Code, klik ikon Extensions (empat kotak) di panel kiri, cari Playwright Test for VSCode, lalu klik Install pada ekstensi buatan Microsoft. TypeScript tidak perlu diinstall terpisah.
Kalau gagal: muncul command not found atau is not recognized
Terminal belum mengenal programnya. Tutup VS Code sepenuhnya, buka lagi, lalu buka terminal baru. Di Windows, kalau python masih tidak dikenal, jalankan installer Python sekali lagi dan pastikan Add python.exe to PATH tercentang. Di macOS, kalau code tidak dikenal, ulangi langkah 5 di kartu VS Code.
4Langkah 4: Buat folder projectSatu folder untuk semua latihan
Semua latihan di 17 modul disimpan di satu folder. Buat foldernya dulu, lalu buka di VS Code.
Buka File Explorer (ikon folder kuning di taskbar), lalu klik Documents di panel kiri.
Klik kanan di area kosong, pilih New > Folder.
Buka Finder, lalu klik Documents di panel kiri.
Klik kanan di area kosong, pilih New Folder.
Buka aplikasi Files, lalu klik Documents di panel kiri.
Klik kanan di area kosong, pilih New Folder.
Ketik nama playwright-python, lalu tekan Enter.
Di VS Code, klik menu File > Open Folder, pilih folder playwright-python di Documents, lalu klik Select Folder (macOS: Open).
Kalau VS Code bertanya Do you trust the authors of the files in this folder?, klik Yes, I trust the authors.
Buka terminal baru lewat Terminal > New Terminal. Sekarang terminal berada di dalam folder project.
Ketik nama playwright-typescript, lalu tekan Enter.
Di VS Code, klik menu File > Open Folder, pilih folder playwright-typescript di Documents, lalu klik Select Folder (macOS: Open).
Kalau VS Code bertanya Do you trust the authors of the files in this folder?, klik Yes, I trust the authors.
Buka terminal baru lewat Terminal > New Terminal. Sekarang terminal berada di dalam folder project.
Berhasil kalau nama folder project tampil di bagian atas panel kiri VS Code (panel Explorer).
5Langkah 5: Siapkan projectBeberapa perintah di terminal VS Code
Ketik perintah di bawah satu per satu di terminal VS Code, dan tekan Enter setelah setiap baris. Tunggu sampai perintah selesai sebelum mengetik yang berikutnya.
# Jadikan folder ini project Python. Membuat pyproject.toml (daftar paket dan pengaturan)uv init --no-package# Install test runner pytest, plugin Playwright, dan pembaca file .envuv add pytestpytest-playwright python-dotenv
# Unduh browser untuk test: Chromium, Firefox, dan WebKit (cukup sekali per laptop)uv run playwright install
# Cek versi Playwrightuv run playwright --version
# Jadikan folder ini project Playwright Test. Kalau ditanya "Ok to proceed?", tekan Enternpm init playwright@latest -- . --quiet--no-examples# Install pembaca file .env (dipakai mulai Modul 11)npm install -D dotenv
# Ubah project ke mode module, supaya script di Modul 3 boleh memakai import dan awaitnpm pkg set type=module
# Unduh browser untuk test: Chromium, Firefox, dan WebKit (cukup sekali per laptop)npx playwright install
# Cek versi Playwrightnpx playwright --version
playwright install mengunduh sekitar 1,2 GB. Ulangi perintah ini setelah memperbarui Playwright.
Opsi --quiet memilih semua jawaban standar (TypeScript, test di folder tests), dan --no-examples tidak membuat file contoh. playwright install mengunduh sekitar 1,2 GB. Ulangi perintah ini setelah memperbarui Playwright.
Berhasil kalau perintah terakhir menampilkan Version 1.xx.x.
Kalau gagal: unduhan browser berhenti atau error
Cek koneksi internet, lalu jalankan ulang perintah yang gagal. Semua perintah di langkah ini aman diulang.
6Langkah 6: Atur base URLSatu bagian di file konfigurasi
Test di tutorial ini hanya menulis path, misalnya page.goto("/login-toko.html"). Base URL melengkapinya menjadi URL penuh https://playground.aminhamzah.com/login-toko.html.
Di panel kiri VS Code, klik file pyproject.toml. Isinya terbuka di tengah.
Klik di akhir baris paling bawah, lalu tekan Enter dua kali untuk membuat baris kosong.
Salin tiga baris di bawah ke baris kosong itu.
Simpan dengan Ctrl+S (macOS: Cmd+S). Titik putih di nama tab hilang tanda file sudah tersimpan.
Di panel kiri VS Code, klik file playwright.config.ts. Isinya terbuka di tengah.
Cari baris // baseURL: 'http://localhost:3000', di dalam bagian use. Tekan Ctrl+F (macOS: Cmd+F) dan ketik baseURL supaya cepat ketemu.
Ganti baris itu dengan baris baseURL di bawah: tanpa // di depannya, dan dengan URL playground.
Simpan dengan Ctrl+S (macOS: Cmd+S). Titik putih di nama tab hilang tanda file sudah tersimpan.
pyproject.tomlplaywright.config.ts
# Pengaturan pytest untuk project ini
[tool.pytest.ini_options]
# URL playground. page.goto("/login-toko.html") jadi https://playground.aminhamzah.com/login-toko.html
base_url = "https://playground.aminhamzah.com"
use: {
// URL playground. page.goto('/login-toko.html') jadi https://playground.aminhamzah.com/login-toko.html
baseURL: 'https://playground.aminhamzah.com',
// Rekam trace saat test diulang setelah gagal (dibahas di Modul 12)
trace: 'on-first-retry',
},
Berhasil kalau URL-nya persis https://playground.aminhamzah.com, tanpa garis miring di akhir. File .env belum perlu sekarang, kamu membuatnya di Modul 11.
7Langkah 7: Jalankan test pertamaSampai terminal menulis 1 passed
Di panel kiri VS Code, arahkan kursor ke nama project PLAYWRIGHT-PYTHON. Klik ikon New Folder (folder dengan tanda +) yang muncul di sebelahnya.
Ketik tests, lalu tekan Enter.
Klik kanan folder tests, pilih New File.
Ketik test_pertama.py, lalu tekan Enter. File kosong terbuka.
Salin kode di bawah ke file itu, lalu simpan dengan Ctrl+S (macOS: Cmd+S).
Di panel kiri VS Code, arahkan kursor ke nama project PLAYWRIGHT-TYPESCRIPT. Klik ikon New Folder (folder dengan tanda +) yang muncul di sebelahnya.
Ketik tests, lalu tekan Enter. Playwright Test mencari file test di folder ini.
Klik kanan folder tests, pilih New File.
Ketik pertama.spec.ts, lalu tekan Enter. File kosong terbuka.
Salin kode di bawah ke file itu, lalu simpan dengan Ctrl+S (macOS: Cmd+S).
tests/test_pertama.pytests/pertama.spec.ts
import re # alat pencocok teks (regular expression)from playwright.sync_api import Page, expect # Page = satu tab browser, expect = pemeriksa hasil# pytest menjalankan setiap fungsi yang namanya diawali test_deftest_halaman_login_terbuka(page: Page) -> None: # page disiapkan otomatis oleh pytest-playwright
page.goto("/login-toko.html") # buka halaman login (base URL + path ini)expect(page).to_have_title(re.compile("TokoQA")) # judul tab harus mengandung "TokoQA"expect(page.get_by_role("button", name="Masuk")).to_be_visible() # tombol Masuk harus terlihat
import { test, expect } from'@playwright/test'; // test = pembuat test, expect = pemeriksa hasil// Satu test bernama "halaman login terbuka". page = satu tab browser, disiapkan otomatistest('halaman login terbuka', async ({ page }) => {
await page.goto('/login-toko.html'); // buka halaman login (base URL + path ini)awaitexpect(page).toHaveTitle(/TokoQA/); // judul tab harus mengandung "TokoQA"awaitexpect(page.getByRole('button', { name: 'Masuk' })).toBeVisible(); // tombol Masuk harus terlihat
});
Arti setiap baris
def test_halaman_login_terbuka(page: Page)
Satu test. pytest mencari fungsi yang namanya diawali test_, lalu memberinya page: tab browser baru yang sudah siap pakai.
page.goto("/login-toko.html")
Membuka halaman. Path ini digabung dengan base_url dari pyproject.toml.
expect(page).to_have_title(...)
Memeriksa judul tab. re.compile("TokoQA") artinya judul cukup mengandung TokoQA, tidak harus sama persis.
page.get_by_role("button", name="Masuk")
Mencari tombol bertuliskan Masuk, seperti pengguna mencarinya di layar.
.to_be_visible()
Lulus kalau tombol itu terlihat. Playwright menunggu sebentar dulu kalau halamannya belum selesai dimuat.
Tugas singkat dengan hasil yang diharapkan. Coba sendiri dulu, lalu buka Lihat jawaban dan centang Sudah dicoba
Latihan di playground
Di akhir setiap modul. Praktikkan materinya langsung di aplikasi latihan
Di dunia QA
Perbandingan dengan pekerjaan QA sehari-hari, supaya konsep baru terasa akrab
Arti setiap baris
Penjelasan rinci di bawah kode. Komentar di dalam kode adalah versi singkatnya
Hati-hati
Jebakan yang sering membuat test gagal atau flaky
Jangan lakukan
Kebiasaan buruk yang pasti ditegur saat code review
Lebih jauh (opsional)
Bagian yang dilipat: trik komunitas dan materi tambahan. Boleh dilewati
Lulus test
Kode diambil dari project contoh Academy dan lulus test terhadap situs ini
Setiap contoh kode diberi nama file, misalnya tests/academy/test_m04_locators.py. Cara memakainya:
Di panel kiri VS Code, buat folder yang disebut nama file itu kalau belum ada (klik kanan > New Folder).
Klik kanan folder itu, pilih New File, lalu ketik nama file-nya persis sama.
Ketik ulang isi kodenya. Komentar di ujung baris boleh ikut diketik atau dilewati.
Simpan dengan Ctrl+S (macOS: Cmd+S).
Jalankan perintah yang tertulis di bawah blok kode lewat terminal VS Code.
Mengetik ulang memang lebih lambat daripada menyalin, tapi di situ kamu belajar membaca error.
playwright-python/playwright-typescript/
playwright-python/
├─ pyproject.toml ← daftar paket + pengaturan pytest
├─ .env ← dibuat di Modul 11 (tidak di-commit)
├─ scripts/ ← script biasa (Modul 3)
├─ tests/
│ ├─ test_pertama.py ← test pertamamu
│ └─ academy/ ← contoh per modul: test_m04_locators.py, dst.
├─ pages/ ← page object (Modul 10)
└─ data/ ← test data JSON (Modul 11)
playwright-typescript/
├─ package.json ← daftar paket ("type": "module")
├─ playwright.config.ts ← pengaturan Playwright Test
├─ .env ← dibuat di Modul 11 (tidak di-commit)
├─ scripts/ ← script biasa (Modul 3)
├─ tests/
│ ├─ pertama.spec.ts ← test pertamamu
│ └─ academy/ ← contoh per modul: m04-locators.spec.ts, dst.
├─ pages/ ← page object (Modul 10)
└─ data/ ← test data JSON (Modul 11)
Situs ini dipakai bersama
Jangan isi data pribadi asli. Keranjang, pesanan, dan janji temu terikat ke sesi login-mu, tapi akun admin TokoQA dan dokter KlinikQA melihat data semua sesi. Data latihan dihapus otomatis setelah 24 jam.
Perintah yang sering dipakai (jalankan test, debug, codegen, report) ada di Cheatsheet.
Modul 15: menjalankan test otomatis di GitHub Actions
Node.js, juga untuk jalur Python
Modul 16: Playwright MCP dijalankan dengan npx
AI agent, misalnya Claude Code
Modul 16: menulis dan memperbaiki test dengan bantuan AI
Docker (opsional)
Modul 15: menjalankan test di image resmi Playwright
Lebih jauh (opsional)Struktur project di dunia kerja
Project latihanmu diberi nama per modul supaya gampang dicocokkan dengan materi. Di kantor, biasanya satu repository hanya untuk satu bahasa, aplikasinya ada di repository lain (atau sudah online), dan test dikelompokkan per fitur.
tokoqa-e2e/ (Python)tokoqa-e2e/ (TypeScript)
tokoqa-e2e/
├─ .github/workflows/e2e.yml ← CI (Modul 15)
├─ pages/ ← page object per halaman
│ ├─ login_page.py
│ ├─ shop_page.py
│ └─ components/header.py ← komponen yang muncul di banyak halaman
├─ api/
│ └─ client.py ← helper request: login, buat data
├─ tests/
│ ├─ conftest.py ← fixture bersama (login, page object)
│ ├─ e2e/
│ │ ├─ auth/test_login.py
│ │ └─ checkout/test_checkout.py
│ └─ api/test_products.py
├─ data/users.json
├─ .env.example ← contoh variabel, .env asli tidak di-commit
├─ pyproject.toml ← dependency + konfigurasi pytest
└─ README.md