🚨 Yaygın Hatalar & Çözümleri
Yaygın Hatalar & Çözümleri: Selenium'daki hata mesajları, Java'nın checked exception'ları gibi davranır: mesajı yüzeysel okursun, yanlış yere bakarsın, saatlerce debug edersin.
Selenium'daki hata mesajları, Java'nın checked exception'ları gibi davranır: mesajı yüzeysel okursun, yanlış yere bakarsın, saatlerce debug edersin. Örneğin NoSuchElementException bir "locator yanlış" hatası gibi görünür ama çoğu zaman locator doğrudur — element henüz DOM'a eklenmemiştir; bu, Java'da bir Future'ı .get() olmadan okumaya çalışmaya benzer. Peki bu hatalar belgelenmiş ve bilinen hatalarsa neden herkes aynı tuzağa düşüyor? Çünkü hata mesajı kök nedeni değil belirtiyi gösterir; "Unable to locate element" diyince akıl "locator'ı düzelt" der ama gerçek sorun genellikle timing, iframe context veya DOM yeniden render olmasıdır. StaleElementReferenceException ise Java'da WeakReference'a GC sonrası erişmek gibidir: element yakalanmış, DOM yeniden render edilmiş, referans artık geçersiz — bunu anlamadan "bir daha findElement" demek sorunu gizler. QA'da bu hataların birikimi flaky test report'larına dönüşür: CI yeşil görünür ama aynı test bazen geçer bazen geçmez; bu güvensizlik, ekibin tüm test sonuçlarını görmezden gelmesine zemin hazırlar.
🎬 Bir Selenium Hatasının Teşhis Zinciri: StaleElementReferenceException
Element bulundu ve kaydedildi
SPA yeniden render eder
StaleElementReferenceException
"Tekrar findElement" refleksi
Kullanmadan ÖNCE yeniden bul
WebDriverWait ile stabilite
`WebElement btn = driver.findElement(By.id("btn"))` — element bulunur ve bir Java referansında SAKLANIR.
Adım 1 — mesajı PARÇALA: "stale element reference: element is not attached to the page document" — bu bir locator hatası DEĞİL, bir YAŞAM SÜRESİ hatasıdır.
React/Vue gibi bir SPA, arka planda DOM'u yeniden render eder — belki sadece görsel olarak aynı görünen ama TEKNİK OLARAK yeni bir element ağacı oluşturur.
Adım 2 — Java köprüsü: bu tam olarak GC sonrası bir `WeakReference`'a erişmeye benzer — referans hâlâ elinde ama işaret ettiği nesne artık YOK.
Kontrast — yaygın yanlış refleks: catch bloğunda "bir daha findElement dene" demek sorunu GİZLER ama tekrar aynı yerde stale olma riskini taşır — kök nedeni anlamadan yama yapmaktır.
Adım 3 — en küçük GÜVENLİ düzeltme: element'i HER kullanmadan HEMEN ÖNCE yeniden bul, asla önceden yakalayıp saklama.