🌐 Chrome DevTools (CDP) & WebDriver BiDi

Chrome DevTools (CDP) & WebDriver BiDi: Selenium 4 öncesinde WebDriver ile tarayıcı iletişimi tek yönlüydü: test kodu komut gönderir, tarayıcı uygular, sonucu HTTP response olara

Selenium 4 öncesinde WebDriver ile tarayıcı iletişimi tek yönlüydü: test kodu komut gönderir, tarayıcı uygular, sonucu HTTP response olarak döner — tıpkı Java'da klasik blocking REST çağrısı gibi. WebDriver BiDi (Bidirectional Protocol) ise bu ilişkiyi kalıcı bir WebSocket tüneline dönüştürür: Java'daki CompletableFuture + event listener mimarisine benzer şekilde, tarayıcıdan gerçek zamanlı event'ler dinleyebilirsin (konsol hatası oluştu, ağ isteği kesildi, JavaScript exception fırladı). Peki HTTP tabanlı WebDriver çalışıyorken neden BiDi'ye ihtiyaç var? Çünkü bazı test senaryoları "bir şey olduğunda tepki ver" gerektirir: authentication dialog'u açıldığında bunu tespit et, broken image için network failure event'ini yakala, console.error() çıktısını CI log'una yaz. Bunlar klasik WebDriver ile yapılamaz. QA için somut kazanım: BiDi sayesinde "JavaScript hatası olan tüm sayfaları tespit et" gibi bir assertion artık mümkün; kaynak kodunu değiştirmeden her E2E testin yanına otomatik JS error monitoring ekleyebilirsin ve production'a çıkmadan önce sessiz JavaScript exception'larını yakalayabilirsin.

Selenium 4 ile birlikte tarayıcıyla çift yönlü iletişim kurabilen WebSocket tabanlı W3C WebDriver BiDi protokolü ve Chrome DevTools Protokolü (CDP) entegrasyonu gelmiştir. Bu sayede test kodumuz tarayıcıdaki olayları anlık olarak dinleyebilir, ağ isteklerini manipüle edebilir ve tarayıcı davranışlarını değiştirebilir.

Java ile BiDi & CDP Kullanımı:

Java'da CDP için `driver.getDevTools()` üzerinden session başlatılır. BiDi için ise `LogInspector` veya `NetworkInterceptor` gibi üst seviye sınıflar kullanılarak WebSocket bağlantısı yönetilir. Bu, Playwright'ın en güçlü yönü olan event-driven yapıyı Selenium'a kazandırır.

1. Console Log & JS Exception Dinleme

Tarayıcıda oluşan JavaScript hatalarını veya `console.log` çıktılarını gerçek zamanlı yakalamak için Selenium 4 BiDi `LogInspector` kullanılır. Bu, UI testleri çalışırken arka planda sinsi JS hatalarının yakalanmasını sağlar.

Java — Console Log Dinleme

Micro Lab: Selenium — Debug ve Screenshot

TODO satirini beklenen cozumdeki kritik satirla degistir. Bu gercek runtime degil; amac dogru yapinin yazilmasini kontrollu olarak pekistirmek.

Adım Adım: createSession() ile addListener() Arasında Ne Olur?

getDevTools() bir WebSocket TÜNELİ açar

`driver.getDevTools()`, standart HTTP WebDriver protokolünden AYRI, tarayıcıyla doğrudan bir WebSocket bağlantısı KURAR.

createSession() CDP'yi AKTİFLEŞTİRİR

`devTools.createSession()` çağrılmadan CDP komutları hiçbir şey YAPMAZ — bu çağrı, tarayıcının Chrome DevTools Protokolü'nü DİNLEMEYE başlamasını sağlar.