playwright
Catatan teknis seputar web development, DevOps, dan integrasi AI.
19 artikel
- 05.56testing
Menjaring baris E2E yang bocor dengan test.afterAll
Jaring pengaman test.afterAll membersihkan baris E2E yang bocor saat test timeout: identitas unik per worker, sapuan terbatas, dan delete idempoten.
TL;DR: Di KotaPortal, grid announcements kebanjiran baris sisa karena test E2E-nya timeout jadi DELETE nggak pernah jalan. Fixnya nambahin hook afterAll di spec informasi-crud: login sekali, terus hapus baris berjudul persis judul run atau yang lebih tua dari awal run, plus delete dua langkah idempoten. Hasilnya baris run lama bersih tanpa ngganggu run lain.
#playwright#testing#e2e - 01.01testing
Token AI Saya Bocor dari Snapshot Browser, Bukan dari Tesnya
Saya kira tesnya yang mahal. Ternyata tiap klik di agent browser mengembalikan satu snapshot accessibility tree, dan konteks habis di situ.
TL;DR: Saya punya masalah dengan QA. Saya tidak perlu biaya token tinggi. Saya ubah cara kerja agent.
#playwright#vitest#mcp - 23.04testing
Menulis E2E untuk Halaman yang Menunda Fetch-nya
Spesifikasi E2E 52 baris untuk halaman daftar ber-debounce 350 ms: nol waitForTimeout, assertion retry sendiri, lima hook data-testid, dan index QA bertambah.
TL;DR: Tes untuk halaman daftar dibuat dengan 52 baris kode. Tes ini menggunakan Playwright untuk menguji elemen berulang kali sampai kondisinya terpenuhi. Timeout assertion dinaikkan menjadi 10 detik untuk mengakomodasi jaringan yang lambat.
#playwright#testing#typescript - 19.06security
Roster Publik Tanpa Bocor PII: Topeng di API, Bukan di Layar
Menyembunyikan kolom sensitif di UI bukan perlindungan. Topeng yang benar ada di lapisan API, dibuktikan asersi negatif E2E.
TL;DR: Sering banget kolom sensitif disembunyiin di layar tapi API tetap kirim semua data, nah itu bocor bahkan ada namanya di OWASP. Solusinya masking di lapisan API pakai DTO yang cuma isinya data publik, sesuai UU PDP soal pengumpulan yang terbatas. Terus diuji pakai asersi negatif biar kebukti data pribadi nggak pernah nyampe ke browser.
#privacy#security#playwright - 19.50testing
Konfirmasi yang Menghilang Sendiri: Pelajaran QA Modul Wisata
Sesi QA modul wisata: tombol hapus lewat skrip membuat dialog konfirmasi native langsung hilang, penghapusan dibatalkan diam-diam.
TL;DR: Tombol hapus di wisata kelihatannya mati, ternyata dialog confirm otomatis di-dismiss Playwright karena nggak ada handler dialog; lewat MCP pakai browser_handle_dialog aman. Dua temuan QA, validasi telepon dan media orphan, akar masalahnya sama dengan modul announcement, jadi dilipat jadi satu keputusan owner lintas modul. Semua hasil diverifikasi langsung ke database dan file, bukan cuma lihat UI.
#playwright#testing#mcp - 18.36testing
Crawler 192 Halaman, Satu 404, dan Sitasi yang Salah Sasaran
Audit tautan internal lewat crawler Playwright: 192 halaman dirayapi, satu dynamic404, dan rujukan next.js#58421 yang ternyata PR polyfill.
TL;DR: Crawler ngecek 192 halaman, cuma satu 404 dinamis gara-gara slug ada tanda kutip satu. Rujukan issue di commit ternyata salah sasaran, akar masalahnya sih double-encoding dari encodeURIComponent. Pelajarannya, referensi di catatan kerja itu cuma hipotesis, mesti dicek dulu sebelum dipercaya.
#playwright#e2e#nextjs - 17.50testing
Assertion Login yang Tidak Pernah Gagal: Ketika URL Selalu Cocok
Mengganti pemeriksaan rute dengan penanda visual pada fixture E2E untuk mendeteksi kegagalan login yang sebelumnya terlewat oleh sistem pengujian.
TL;DR: Helper login E2E keliatannya aman karena ngecek URL /admincms, padahal rute itu sama aja mau login sukses atau gagal jadi tesnya nggak pernah merah. Akhirnya assertion diganti jadi ngecek chip admin yang cuma muncul kalau sesi beneran valid, jadi kalau gagal langsung ketahuan. Intinya assertion yang nggak bisa gagal tuh nggak ada gunanya sama sekali.
#playwright#e2e#testing - 16.37testing
Fixture Dulu, Spec Kemudian: Satu Login Buat Semua Test
Satu fixture login dan satu fixture bukti ditulis sebelum spesifikasi pertama, lengkap dengan jebakan aria-label yang membuat getByLabel salah sasaran.
TL;DR: Gue nambahin Task 0 buat bikin fixture reusable sebelum nulis spec biar nggak refaktor belakangan. Daripada nambah data-testid, login ngambil dari komponen asli pakai getByLabel Email dan Kata sandi pakai exact true biar nggak ketuker tombol Tampilkan kata sandi. Jadinya cuma ada loginAsAdmin dan evidence di satu file, sengaja nggak pakai auth setup karena test admin saling ngerubah status server.
#playwright#e2e#testing - 13.16testing
Gate yang Dites dari Luar: Submit Tanpa Pilar Nggak Sampai Server
Nulis test e2e yang assertion-nya bukan isi halaman, tapi jumlah request yang keluar: form pendaftaran tanpa pilar harus diblokir di klien. Plus satu edge tan
TL;DR: Form daftar layanan wajib pilih pilar, kalau kosong harus keblok di browser bukan server, jadi test Playwright ngecek error muncul dan request gak kekirim sama sekali. Agak ribet karena harus login dev dulu, beresin wizard, isi semua field kecuali pilar baru submit. Sekalian ada fix filter tanggal biar data hari ini tetap muncul pas pilih rentang hari ini.
#playwright#testing#e2e