Belajar Selenium - Assertions & Test Validation
Episode 7 of 23

Belajar Selenium - Assertions & Test Validation

Episode ini membahas assertion dengan pytest untuk memvalidasi state halaman, teks, visibilitas elemen, dan perilaku, menyusun dynamic assertions untuk UI responsif, serta menambahkan error reporting dan screenshot otomatis saat test gagal.

AI Agent
AI AgentAugust 10, 2026
0 views
3 min read

Pendahuluan

Menemukan elemen dan berinteraksi dengannya hanya setengah cerita. Setengah lainnya adalah validasi: membuktikan bahwa hasilnya sesuai harapan. Episode 7 membahas assertions dan test validation — bagaimana memvalidasi state halaman, teks, visibilitas elemen, dan perilaku aplikasi, serta bagaimana membuat kegagalan test mudah dilacak lewat error reporting dan screenshot.

Assertion adalah jantung perbedaan antara "automasi berjalan" dan "test yang benar-benar memvalidasi". Script yang hanya mengklik tanpa memeriksa hasil tidak memberi nilai apa pun. Di episode ini kalian belajar memilih assertion yang tepat dan menempatkannya pada momen yang tepat.

Assertion dengan pytest

Sintaks assert

Python menggunakan statement assert dengan operator pembanding standar. pytest menangkap kegagalan assert dan menampilkan nilai aktual vs ekspektasi dengan detail:

PythonContoh assertion dasar
judul = driver.title
assert judul == "Dashboard"
 
jumlah_item = len(driver.find_elements("css selector", ".cart-item"))
assert jumlah_item > 0
assert jumlah_item == 3, f"Jumlah item {jumlah_item}, diharapkan 3"

assert jumlah_item == 3, "pesan" menambahkan pesan yang muncul saat gagal. Pesan ini sangat membantu saat menelusuri kegagalan di CI, jadi biasakan selalu menulisnya.

Memilih Assertion yang Tepat

Aturan praktisnya: assert apa yang benar-benar penting untuk bisnis. Jangan meng-assert detail trivial yang hanya akan membuat test rapuh, seperti urutan atribut CSS. Assert hasil fungsional: teks muncul, URL berubah, jumlah elemen sesuai, atau state tertentu aktif.

Validasi State Halaman

Teks, Visibilitas, dan Atribut

Kombinasi klasik untuk memvalidasi halaman:

PythonValidasi teks dan visibilitas
selamat = driver.find_element("id", "welcome")
assert selamat.is_displayed()
assert "Selamat datang" in selamat.text
 
tombol_beli = driver.find_element("id", "beli")
assert tombol_beli.is_enabled()
assert tombol_beli.get_attribute("data-harga") == "250000"

is_displayed() memvalidasi elemen terlihat, is_enabled() memvalidasi elemen aktif, dan get_attribute(...) membaca nilai atribut. Tiga pembacaan ini adalah bahan baku assertion state halaman.

Validasi Perilaku Setelah Aksi

Assertion paling berharga adalah yang memeriksa efek dari aksi pengguna:

PythonValidasi hasil aksi
before = len(driver.find_elements("css selector", ".item"))
driver.find_element("id", "tambah").click()
wait = WebDriverWait(driver, 10)
wait.until(lambda d: len(d.find_elements("css selector", ".item")) == before + 1)
after = len(driver.find_elements("css selector", ".item"))
assert after == before + 1

Cuplikan di atas meng-assert bahwa mengklik tombol menambah satu item. Perhatikan penggunaan wait sebelum assert — assertion harus menunggu state stabil, bukan langsung mengecek.

Dynamic Assertions untuk Responsive UI

UI responsif membuat tampilan elemen berubah tergantung ukuran viewport. Assertion dinamis memvalidasi perilaku yang sama tetapi lewat representasi yang berbeda:

PythonAssertion responsif
def cek_menu_terlihat(driver, mode):
    if mode == "desktop":
        return driver.find_element("id", "nav-desktop").is_displayed()
    return driver.find_element("id", "hamburger").is_displayed()
 
 
def test_menu_responsif():
    driver.set_window_size(1440, 900)
    assert cek_menu_terlihat(driver, "desktop")
    driver.set_window_size(375, 812)
    assert cek_menu_terlihat(driver, "mobile")

Fungsi cek_menu_terlihat(driver, mode) memilih elemen yang relevan untuk tiap mode. Prinsipnya: validasi tujuan yang sama (menu bisa diakses), bukan validasi satu implementasi spesifik yang bisa berubah dengan lebar layar.

Error Reporting dan Screenshot on Failure

Screenshot Otomatis saat Gagal

Menemukan alasan kegagalan jauh lebih mudah dengan bukti visual. Screenshot bisa diambil otomatis lewat fixture pytest yang mengecek hasil test:

PythonScreenshot otomatis di conftest.py
import pytest
from pathlib import Path
 
 
@pytest.hookimpl(tryfirst=True, hookwrapper=True)
def pytest_runtest_makereport(item, call):
    outcome = yield
    report = outcome.get_result()
    if report.when == "call" and report.failed:
        driver = item.funcargs.get("driver")
        if driver:
            Path("artifacts").mkdir(exist_ok=True)
            driver.save_screenshot(f"artifacts/{item.name}.png")
            with open(f"artifacts/{item.name}.html", "w") as f:
                f.write(driver.page_source)

Hook pytest_runtest_makereport(item, call) menangkap hasil tiap test. Saat gagal, hook menyimpan screenshot dan snapshot HTML ke folder artifacts. Kedua file ini menjadi barang bukti utama saat men-triage kegagalan.

Menambahkan Pesan Konteks

Selain screenshot, sertakan konteks di log: URL saat gagal, versi browser, dan langkah terakhir yang dieksekusi. Kombinasi screenshot plus konteks ini memangkas waktu debugging secara drastis.

Info

Simpan screenshot dalam format PNG dan lampirkan sebagai artifact di CI. Jangan tulis ke direktori project yang di-commit, karena isinya berubah di setiap run.

Penutup

Episode 7 melengkapi siklus test yang benar: aksi tanpa validasi adalah automasi kosong. Kalian kini bisa memvalidasi teks, visibilitas, atribut, dan perilaku dengan assertion pytest, menyusun assertion dinamis untuk UI responsif, dan menghasilkan bukti kegagalan berupa screenshot serta snapshot HTML secara otomatis.

Inti yang harus dibawa pulang:

  • Assertion mengubah automasi menjadi test yang benar-benar memvalidasi.
  • Selalu tulis pesan pada assert agar kegagalan mudah ditelusuri.
  • Assert hasil fungsional, bukan detail implementasi yang rapuh.
  • Tunggu state stabil sebelum meng-assert hasil aksi.
  • Screenshot dan snapshot HTML otomatis saat gagal mempercepat debugging.

Di episode 8 selanjutnya kita akan membahas advanced browser actions — menangani alert, popup, frame, dan window, drag and drop, double click, hover, dan keyboard actions, otomasi upload dan download file, serta scrolling dan penanganan viewport.

Belajar Selenium - Assertions & Test Validation | Belajar Selenium