Episode ini membahas aksi browser tingkat lanjut: 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.

Setelah menguasai klik, ketik, dan submit di episode 4, kalian siap untuk aksi yang lebih menantang: advanced browser actions. Aplikasi nyata punya alert JavaScript, iframe yang menyembunyikan konten, tab baru yang terbuka, elemen yang harus di-drag, file yang harus di-upload, dan halaman yang panjang harus di-scroll. Episode 8 membekali kalian dengan seluruh kendali itu.
Aksi-aksi ini sering menjadi bagian paling rumit dalam automasi, karena banyak di antaranya tidak bisa diselesaikan dengan find_element dan click biasa. Kalian butuh objek khusus seperti Alert, ActionChains, dan pemahaman tentang window handles. Mari kita bedah satu per satu.
Alert browser adalah dialog native yang memblokir halaman. Selenium mengelolanya lewat objek Alert:
from selenium.webdriver.common.alert import Alert
Alert(driver).accept()Untuk alert dengan input, gunakan send_keys pada objek alert lalu accept:
alert = driver.switch_to.alert
alert.send_keys("nama pengguna")
alert.accept()driver.switch_to.alert mengalihkan konteks ke dialog aktif, send_keys mengisi prompt, dan accept() menyetujui. Jika muncul tombol batal, dismiss() adalah kebalikannya.
Ketika klik membuka tab baru, browser punya lebih dari satu window handle:
sebelum = driver.current_window_handle
driver.find_element("id", "buka-tab").click()
for handle in driver.window_handles:
if handle != sebelum:
driver.switch_to.window(handle)
break
print("Judul tab baru:", driver.title)
driver.close()
driver.switch_to.window(sebelum)driver.window_handles mengembalikan daftar semua tab. Pola di atas berpindah ke tab baru, bekerja di sana, menutupnya, lalu kembali ke tab awal.
Konten di dalam <iframe> tidak bisa ditemukan langsung dari konteks halaman utama. Kalian harus mengalihkan konteks lebih dulu:
driver.switch_to.frame("payment-frame")
driver.find_element("id", "nomor-kartu").send_keys("4111111111111111")
driver.switch_to.default_content()driver.switch_to.frame("payment-frame") memindahkan konteks ke iframe berdasarkan id, name, atau elemen. Setelah selesai, default_content() mengembalikan konteks ke halaman utama. Jangan lupa keluar dari iframe sebelum mencari elemen di halaman utama.
ActionChains memungkinkan aksi kompleks yang berurutan:
from selenium.webdriver.common.action_chains import ActionChains
sumber = driver.find_element("id", "sumber")
target = driver.find_element("id", "target")
ActionChains(driver).drag_and_drop(sumber, target).perform()drag_and_drop(sumber, target) menyeret elemen ke target. Untuk aksi lain — hover untuk memicu menu, double click, dan klik kanan — ActionChains juga menyediakan move_to_element, double_click, dan context_click.
Kombinasi tombol seperti Ctrl+A dan Enter bisa dikirim lewat class Keys:
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
inputan = driver.find_element("id", "editor")
inputan.send_keys(Keys.CONTROL, "a")
inputan.send_keys(Keys.BACKSPACE)
ActionChains(driver).send_keys(Keys.TAB).perform()Keys.CONTROL dan Keys.BACKSPACE adalah contoh modifikasi keyboard. ActionChains send_keys(Keys.TAB) mengirim tombol di level halaman, bukan di elemen tertentu.
Input file di HTML menyembunyikan dialog OS, tapi Selenium tetap bisa mengirim path langsung:
path = "/home/devnull/Documents/cv.pdf"
driver.find_element("id", "input-file").send_keys(path)send_keys(path_lengkap) pada elemen input bertipe file adalah cara paling stabil untuk upload. Dialog native tidak bisa diotomasi langsung oleh Selenium, jadi jangan pernah mencoba mengklik tombol "Browse".
Untuk download, set preferensi browser agar file masuk ke folder yang diinginkan:
from selenium import webdriver
opsi = webdriver.ChromeOptions()
prefs = {"download.default_directory": "/tmp/download-test"}
opsi.add_experimental_option("prefs", prefs)
driver = webdriver.Chrome(options=opsi)prefs["download.default_directory"] menentukan folder tujuan unduhan. Setelah memicu download, tunggu file benar-benar muncul di folder sebelum melanjutkan assertion.
Elemen di bawah lipatan halaman kadang perlu di-scroll dulu sebelum diinteraksi. Bisa lewat JavaScript atau aksi scroll:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")
driver.set_window_size(1440, 900)
driver.execute_script("arguments[0].scrollIntoView(true);", tombol)window.scrollTo(0, document.body.scrollHeight) menggulir ke bagian bawah halaman, sementara scrollIntoView(true) membawa elemen tertentu ke area pandang. set_window_size(1440, 900) mengatur ukuran viewport untuk test responsif.
Warning
Klik otomatis biasanya men-scroll elemen ke dalam pandang. Jika elemen masih tertutup elemen lain, kombinasikan scroll dengan explicit wait untuk elemen clickable sebelum berinteraksi.
Episode 8 memperluas jangkauan automasi kalian: alert yang memblokir halaman, tab baru, iframe yang menyembunyikan konten, drag and drop, hover, keyboard, upload dan download file, serta scrolling halaman panjang — semua kini bisa dikendalikan.
Inti yang harus dibawa pulang:
driver.switch_to.alert; accept, dismiss, dan input.switch_to.frame dan kembali lewat default_content.send_keys ke input file; download diatur lewat prefs browser.Di episode 9 selanjutnya kita akan membahas data-driven dan parameterized testing — memakai data provider untuk banyak test case, mem-parameterisasi input dan hasil yang diharapkan, mengambil data dari CSV, JSON, dan Excel, serta memperluas cakupan test ke banyak browser dan environment.