Playwright • Praktik Python
Playwright Python: Locator dan Auto-Wait
Test yang berhasil di laptop belum tentu stabil saat UI lebih lambat. Latihan ini memisahkan dua hal: kesiapan elemen untuk diklik dan hasil bisnis setelah klik. Auto-waiting pada action tidak otomatis membuktikan operasi penyimpanan selesai.
Lihat kelas Playwright PythonPanduan Ini Cocok untuk Siapa?
- Pemula yang sudah memahami Python dasar
- Peserta yang ingin latihan dengan hasil terukur
- Praktisi yang sedang merapikan alur automation
Roadmap Belajar Bertahap
-
Langkah 1
Siapkan prasyarat
Cek environment dan file latihan sebelum menjalankan perintah.
-
Langkah 2
Jalankan contoh minimal
Mulai dari satu test agar penyebab kegagalan mudah ditelusuri.
-
Langkah 3
Baca hasil dan coba kegagalan
Ubah ekspektasi untuk memastikan assertion benar-benar bekerja.
-
Langkah 4
Hubungkan ke project
Adaptasi data dan locator, lalu lanjutkan ke panduan terkait.
Pilih locator berdasarkan makna elemen
Gunakan label untuk input dan role dengan accessible name untuk tombol. Jika aplikasi tidak mempunyai semantik yang memadai, sepakati test ID stabil dengan tim. XPath panjang yang mengikuti urutan div mudah berubah tanpa perubahan perilaku.
Exact matching membantu membedakan tombol Simpan dari Simpan sebagai draft. Apabila masih ada beberapa tombol yang sama, batasi pencarian pada form atau region yang relevan; jangan otomatis menambahkan first untuk menyembunyikan ambiguitas.
Tunggu hasil yang dapat diamati
Gunakan setup pada tutorial test pertama, lalu simpan tests/web/test_wait.py berikut. Tombol sengaja memperbarui status dengan jeda pendek agar assertion perlu menunggu. setTimeout di sini adalah simulasi aplikasi, bukan sleep pada test.
from playwright.sync_api import Page, expect
def test_status_asynchronous(page: Page):
page.set_content("""
<button type="button" onclick="setTimeout(() => {
document.querySelector('#status').textContent = 'Data tersimpan';
}, 300)">Simpan</button>
<p id="status" role="status">Menunggu</p>
""")
page.get_by_role("button", name="Simpan", exact=True).click()
expect(page.get_by_role("status")).to_have_text("Data tersimpan")
Bedakan locator salah dan proses yang belum selesai
Jalankan test dengan perintah di bawah. Jika timeout muncul sebelum klik, cek accessible name dan apakah elemen berada dalam frame. Jika timeout muncul pada assertion, periksa apakah teks hasil memang berubah.
Trace dapat berisi screenshot dan informasi aplikasi. Simpan artifact dari environment latihan tanpa data sensitif. Jangan sekadar menaikkan timeout global sebelum memahami pesan kegagalan.
.venv/bin/python -m pytest tests/web/test_wait.py --tracing=retain-on-failure --screenshot=only-on-failure
Latihan untuk memahami batas auto-wait
Ganti teks hasil yang diharapkan menjadi teks yang salah. Test harus gagal meskipun tombol sudah berhasil diklik. Ini menunjukkan perbedaan keberhasilan action dengan kebenaran hasil.
Tambahkan tombol kedua dengan nama sama pada demo. Pelajari pesan strict mode violation, kemudian perjelas scope atau nama tombol. Kembalikan demo ke satu tombol sebelum menggabungkannya ke pipeline.
Pertanyaan yang Sering Ditanyakan
Apakah auto-wait berarti tidak perlu assertion?
Tidak. Auto-wait membantu action siap dilakukan; assertion menentukan hasil yang benar.
Apakah time.sleep memperbaiki flaky test?
Jeda tetap dapat memperlambat test dan masih gagal ketika aplikasi lebih lambat. Tunggu kondisi yang benar dan selidiki akar kegagalannya.
Referensi dan bahan latihan
Disusun oleh Kelas Otomesyen. Contoh memakai data latihan; sesuaikan dependency, device, dan locator dengan project.
Unduh starter project (.zip)Unduh petunjuk starter project