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 Python

Panduan 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

  1. Langkah 1

    Siapkan prasyarat

    Cek environment dan file latihan sebelum menjalankan perintah.

  2. Langkah 2

    Jalankan contoh minimal

    Mulai dari satu test agar penyebab kegagalan mudah ditelusuri.

  3. Langkah 3

    Baca hasil dan coba kegagalan

    Ubah ekspektasi untuk memastikan assertion benar-benar bekerja.

  4. 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.

test_wait.py · python · Unduh file
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.

Simpan bukti ketika gagal · bash
.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

Lanjutkan ke Panduan Terkait

Lihat kelas Playwright Python