🪟 Frames, Alert & Çoklu Pencere Yönetimi
Frames, Alert & Çoklu Pencere Yönetimi: iframe, sayfa içindeki ayrı bir DOM bağlamıdır — tıpkı Java'da bir ClassLoader içine başka bir ClassLoader yüklemek gibi: dış context'ten
iframe, sayfa içindeki ayrı bir DOM bağlamıdır — tıpkı Java'da bir ClassLoader içine başka bir ClassLoader yüklemek gibi: dış context'ten findElement ile içerideki elementlere erişemezsin, önce driver.switchTo().frame() ile o bağlama geçmen gerekir. Peki sayfa görsel olarak tek parçaymış gibi görünüyorken neden ayrı context gerekiyor? Çünkü tarayıcı, iframe'in güvenlik ve kaynak yalıtımını korumak zorundadır; ödeme formları (Stripe, iyzico) ve CAPTCHA widget'ları bu yüzden her zaman ayrı iframe'de yaşar. Alert'ler ise farklı bir kategori: bunlar DOM elementleri değil, tarayıcı seviyesi native dialog'lardır — driver.switchTo().alert() ile yakalanmazsa tüm test bloke olur. Çoklu pencere yönetimi, Java'daki WeakReference'lı thread ID takibine benzer: her window handle bir String ID'dir, driver.getWindowHandles() ile alınır ve switchTo().window(handle) ile odak değiştirilir. QA'da en sık production bug'a dönüşen senaryo şudur: ödeme sayfasındaki iframe context değiştirme eksik bırakılırsa, "Satın Al" butonu bulunur ama tıklanamaz — exception yoktur, sadece test yanlış PASS verir ve ödeme akışı hiç test edilmemiş olur.
1. Alert / Confirm / Prompt Yönetimi
Java — Alert Yönetimi
Micro Lab: Selenium — Frame ve Alert yonetimi
TODO satirini beklenen cozumdeki kritik satirla degistir. Bu gercek runtime degil; amac dogru yapinin yazilmasini kontrollu olarak pekistirmek.
Adım Adım: alert.accept() ile alert.dismiss() Arasındaki Fark
Önce alertIsPresent() ile BEKLENİR
Alert her zaman ANINDA açılmayabilir — `wait.until(ExpectedConditions.alertIsPresent())` alert hazır olana kadar bekler, aksi halde `NoAlertPresentException` fırlar.
`alert.accept()`, dialog'daki OK/Kabul Et butonuna basmayı simüle eder — `confirm()` dialog'unda bu JavaScript tarafında `true` değeri döndürür.
dismiss() Cancel'a basar
`alert.dismiss()`, Cancel/Reddet butonuna basmayı simüle eder — `confirm()` dialog'unda JavaScript tarafında `false` döner.
sendKeys() sadece prompt'ta anlamlıdır
`prompt.sendKeys("metin")`, sadece `window.prompt()` dialog'undaki input alanına yazı yazar — `alert()` ve `confirm()`'de input alanı OLMADIĞI için bu çağrı hata verir.
Python — Alert Yönetimi