Episode ini membahas aspek keamanan dalam automasi browser: mengautomasi login flow yang aman, menangani 2FA, SSO, dan OAuth, menguji aksesibilitas dan konten aman, serta menangkap console log dan network errors dari browser.

Test yang paling sering rusak — dan paling berisiko — adalah test yang berurusan dengan login dan keamanan. Aplikasi nyata punya autentikasi multi-faktor, SSO, OAuth, dan halaman yang hanya boleh diakses pengguna tertentu. Episode 12 membahas cara mengautomasi alur tersebut tanpa mengorbankan keamanan.
Masalah utama mengautomasi alur aman adalah konflik: kalian perlu kredensial dan sesi untuk menguji, tetapi kredensial tidak boleh bocor ke repository atau log. Episode ini memberikan pola pengelolaan secret, strategi menangani 2FA dan SSO, dan cara menangkap bukti keamanan dari console serta network.
Jangan pernah menulis kredensial di dalam kode. Simpan di environment variable dan baca di runtime:
import os
email = os.environ["TEST_EMAIL"]
password = os.environ["TEST_PASSWORD"]
halaman = LoginPage(driver)
halaman.isi_email(email)
halaman.isi_password(password)
halaman.klik_masuk()os.environ["TEST_EMAIL"] mengambil nilai dari environment. Di lokal, nilai diletakkan di .env (jangan di-commit); di CI, nilai masuk sebagai secret di pengaturan pipeline.
Test keamanan juga memvalidasi bahwa halaman terlindungi dengan benar:
driver.get("https://app.example.com/dashboard")
assert "login" in driver.current_urlassert "login" in driver.current_url membuktikan bahwa pengguna anonim diarahkan ke halaman login. Ini adalah assertion sederhana namun penting: proteksi rute harus selalu diuji, bukan dianggap ada.
Kode sekali pakai (TOTP) tidak bisa diprediksi, jadi jangan mencoba mengetik kode nyata berulang kali. Pendekatan umum adalah melewati 2FA di test dengan sesi yang sudah diautentikasi:
cookies = [
{"name": "session", "value": os.environ["TEST_SESSION"], "domain": "app.example.com"},
]
driver.get("https://app.example.com/login")
for c in cookies:
driver.add_cookie(c)
driver.get("https://app.example.com/dashboard")driver.add_cookie(c) menyuntikkan cookie sesi yang diperoleh dari proses 2FA yang dilakukan sekali di luar test. Dengan begitu, test tidak perlu menebak kode TOTP — namun sesi harus diperbarui sebelum kedaluwarsa.
Untuk SSO berbasis penyedia eksternal, pisahkan dua tanggung jawab: uji alur SSO sekali untuk memastikan callback berfungsi, dan lewati SSO di test fungsional lain dengan sesi langsung. Mengautomasi penyedia eksternal di setiap test membuat suite lambat dan bergantung pada sistem di luar kendali kalian.
Halaman yang menampilkan data sensitif — seperti nomor kartu atau identitas — harus diuji bahwa data tidak bocor ke permukaan yang salah:
kartu = driver.find_element("id", "ringkasan-kartu")
assert kartu.get_attribute("data-masked") == "true"
assert "4111" not in kartu.textget_attribute("data-masked") memvalidasi bahwa aplikasi menandai data sebagai ter-mask, dan assertion kedua memastikan nomor penuh tidak tampil. Test semacam ini mencegah regresi keamanan di bagian UI yang mudah terlewat.
Selenium bisa menangkap log dari browser. Mengaktifkan logging membutuhkan opsi khusus di Chrome:
from selenium.webdriver.chrome.options import Options
opsi = Options()
opsi.set_capability("goog:loggingPrefs", {"browser": "ALL", "performance": "ALL"})
driver = webdriver.Chrome(options=opsi)goog:loggingPrefs dengan nilai {"browser": "ALL", "performance": "ALL"} mengaktifkan dua jenis log: konsol browser dan log performa jaringan. Setelah test selesai, ambil dan periksa:
for entry in driver.get_log("browser"):
if entry["level"] == "SEVERE":
print("Error konsol:", entry["message"])driver.get_log("browser") mengembalikan daftar log konsol. Memfilter level SEVERE menangkap error JavaScript yang tidak terlihat di test, seperti bug yang hanya muncul di browser tertentu.
Log performa berisi data request dan response. Kalian bisa mencari request yang gagal dengan memfilter URL tertentu — ini membantu memastikan tidak ada resource yang gagal dimuat saat test berjalan.
Warning
Jangan pernah mencetak isi cookies atau token ke log test. Log CI sering dibagikan lintas tim; kebocoran sesi lewat log adalah insiden keamanan yang nyata.
Episode 12 menyeimbangkan dua tuntutan: automasi yang lancar dan keamanan yang terjaga. Kalian kini mengelola kredensial lewat environment, melewati 2FA dan SSO dengan sesi yang disuntikkan, menguji konten sensitif yang ter-mask, serta menangkap console dan network errors sebagai bukti kualitas.
Inti yang harus dibawa pulang:
Di episode 13 selanjutnya kita akan membahas test stability dan flakiness — meminimalkan flaky test dengan selector yang reliable, strategi retry dan deteksi flaky, monitoring stabilitas eksekusi, serta best practice agar suite otomasi stabil.