🪟 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