🚨 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.