- Selenium nedir ve neyi otomatikleştirir?
- Başlangıç: ilk test akışı
- Element bulma ve etkileşim
- Bekleme stratejisi: kararsız testlerin ana kaynağı
- Page Object Model ve test mimarisi
- Test çerçevesi, raporlama ve CI/CD
- Nelerin otomatikleştirileceğine karar vermek ve sık hatalar
- Mindset programlarında Selenium
- Sık sorulan sorular
Selenium WebDriver ile Test Otomasyonu Adımları
Selenium ile web test otomasyonu: WebDriver mimarisi, element bulma, bekleme stratejisi, Page Object Model, test çerçevesi, raporlama ve CI/CD entegrasyonu.
Selenium nedir ve neyi otomatikleştirir?
Selenium, tarayıcıyı kodla yönetmenizi sağlayan açık kaynaklı bir otomasyon ekosistemidir. Kullanıcının yaptığı işlemler (sayfayı açmak, alana yazmak, düğmeye tıklamak, sonucu okumak) bir testin adımlarına dönüşür. Böylece her sürümde tekrarlanan elle kontrol, makineye devredilir.
Ekosistemin ana parçası WebDriver'dır. Test kodunuz WebDriver arayüzüyle komut gönderir, tarayıcıya özel sürücü bu komutu ilgili tarayıcıya iletir ve sonucu geri bildirir. Bu mimari sayesinde aynı test kodu farklı tarayıcılarda çalıştırılabilir. Eskiden bu sürücüleri elle indirip sürümünü tarayıcıyla eşlemek gerekiyordu; Selenium 4 serisinde gelen Selenium Manager bu işi otomatikleştirir. Siz bir sürücü yolu vermezseniz, gereken sürücüyü bulur, indirir ve önbelleğe alır; güncel sürümlerde gerekirse tarayıcının kendisini de getirebilir. Bu yüzden yeni bir projede ilk adım, sürücü dosyalarıyla uğraşmak yerine güncel Selenium kütüphanesini kurmaktır. Selenium Grid ise testleri birden çok makinede ve tarayıcıda paralel yürütmeyi sağlayan dağıtık yapıdır. Selenium yalnızca arayüz düzeyindeki davranışı doğrular; birim ve API testlerinin yerini almaz, onları tamamlar.
Başlangıç: ilk test akışı
Bir Selenium testinin temel akışı her dilde benzerdir. Önce sürücü nesnesi oluşturulur ve tarayıcı açılır; sürücü dosyası Selenium Manager tarafından otomatik sağlandığı için ek kurulum gerekmez. Ardından sayfaya gidilir, elementler bulunur, işlemler yapılır, beklenen sonuç doğrulanır ve en sonda tarayıcı kapatılır. Kapatma adımı, hata olsa bile çalışacak biçimde kurgulanmalıdır; yoksa arka planda açık tarayıcılar birikir.
Örnek bir senaryo: giriş sayfasını açın, kullanıcı adı ve parola alanlarını doldurun, giriş düğmesine tıklayın, yönlendirilen sayfada kullanıcı adının görüntülendiğini doğrulayın. Bu tek senaryo, bulma, etkileşim ve doğrulama üçlüsünün tamamını içerir. Selenium; Java, Python, C# ve JavaScript gibi dillerle kullanılabilir. Ekibin zaten kullandığı dil, öğrenme eğrisini ve bakım maliyetini en çok belirleyen etkendir.
Element bulma ve etkileşim
Testlerin en kırılgan noktası elementi bulma biçimidir. Selenium, elementleri kimlik, ad, sınıf, etiket, bağlantı metni, CSS seçici ve XPath ile bulabilir. Genel kural, en kararlı ve en anlamlı özelliği tercih etmektir. Uygulama ekibi test için ayrılmış özel öznitelikler (örneğin test kimliği) eklerse, arayüz değişse bile testler kırılmaz.
XPath güçlüdür ama sayfa yapısına sıkı bağlıysa kırılgan olur. Sayfadaki sıraya dayanan uzun yollar yerine anlamlı özelliklere dayalı kısa ifadeler seçin. Etkileşim tarafında tıklama, yazma, açılır listeden seçme, fare hareketi ve klavye eylemleri bulunur. Çerçeve (frame) ve yeni pencere içindeki elementlere erişmeden önce bağlamı değiştirmeniz gerekir; bu, yeni başlayanların sık takıldığı bir noktadır.
Bekleme stratejisi: kararsız testlerin ana kaynağı
Modern sayfalar içeriği asenkron yükler. Test, element henüz hazır değilken işlem yapmaya çalışırsa hata verir; bazı çalıştırmalarda geçip bazılarında kalan "kararsız" (flaky) testlerin başlıca nedeni budur. Çözüm sabit bekleme komutları değil, koşula bağlı beklemelerdir: element görünür olana, tıklanabilir olana ya da metin belirene kadar belirli bir üst sınırla beklemek.
Sabit uyku komutları testi hem yavaşlatır hem de güvenilmez kılar: süre kısa kalırsa hata, uzun kalırsa boşa zaman harcanır. Örtük ve açık bekleme türlerini aynı testte karıştırmak da öngörülemez sonuç doğurabilir; tek bir yaklaşım seçip tutarlı uygulayın. Kararsız bir testi sürekli yeniden çalıştırarak "geçti" saymak sorunu gizler; asıl nedeni bulup düzeltmek gerekir.
Page Object Model ve test mimarisi
Testler büyüdükçe aynı seçiciler ve adımlar birçok yerde tekrarlanır. Arayüz bir kez değiştiğinde birçok testi elle düzeltmek zorunda kalırsınız. Page Object Model (POM) bu sorunu çözer: her sayfa ya da bileşen için bir sınıf yazılır; elementleri ve sayfada yapılabilen işlemleri o sınıf taşır. Testler ise seçici değil iş diliyle yazılır: "kullanıcı girişi yap", "sepete ürün ekle".
İyi bir mimaride katmanlar nettir: • Sayfa nesneleri: element ve etkileşimler • Test sınıfları: senaryo ve doğrulamalar • Ortak yardımcılar: bekleme, ekran görüntüsü, veri üretimi • Yapılandırma: ortam adresi, tarayıcı seçimi, kimlik bilgileri (koda gömülmeden)
Doğrulamalar sayfa nesnesinde değil test sınıfında yapılır; sayfa nesnesi yalnızca durumu raporlar. Testler birbirinden bağımsız olmalıdır, yani bir testin sonucu başka testin başarısına bağlı olmamalıdır.
Test çerçevesi, raporlama ve CI/CD
Selenium tek başına bir test çerçevesi değildir; test yürütme, gruplama, parametreli çalıştırma ve doğrulama için bir çerçeveyle birlikte kullanılır. Java dünyasında TestNG ve JUnit bu rolü üstlenir; diğer dillerin kendi eşdeğerleri vardır. Çerçeve; testlerin etiketlenmesini, hazırlık ve temizlik adımlarını ve paralel çalıştırmayı sağlar.
Raporlama ve izlenebilirlik hata analizini hızlandırır. Başarısız her testte ekran görüntüsü, günlük kaydı ve gerekirse sayfa kaynağı saklamak, hatanın yeniden üretilmesini kolaylaştırır. Testleri sürekli tümleştirme hattına bağlayıp her değişiklikte çalıştırmak otomasyonun asıl değerini ortaya çıkarır. Bu hatta Selenium Grid ya da bulut tarayıcı hizmetleri paralel yürütme sağlar. Başsız (headless) tarayıcı kipi sunucu ortamında yaygındır, ancak bazı hatalar yalnızca görünür kipte ortaya çıkar; ikisini de dönemsel olarak denemek iyi bir alışkanlıktır.
Nelerin otomatikleştirileceğine karar vermek ve sık hatalar
Her şeyi arayüzden test etmek yavaş ve pahalıdır. Arayüz testlerini, kullanıcı için en kritik akışlara (giriş, ödeme, kayıt, temel arama) ayırın; iş kuralları ve veri doğrulaması için birim ve API testlerini kullanın. Test piramidinin mantığı budur: altta çok sayıda hızlı test, üstte az sayıda arayüz testi.
Sık hatalar: • Sabit bekleme komutlarıyla testi yavaşlatmak ve kararsızlaştırmak • Kırılgan, sayfa sırasına dayalı seçiciler kullanmak • Tüm senaryoları arayüzden otomatikleştirmeye çalışmak • Testler arasında veri bağımlılığı bırakmak; ortak kullanıcı verisini testlerin birbirini bozacağı biçimde paylaşmak • Test bakımına zaman ayırmamak; otomasyon bir kez yazılıp bırakılacak bir ürün değildir • Başarısız testi araştırmadan yeniden çalıştırıp geçmesini beklemek
Mindset programlarında Selenium
Mindset'in Selenium ile Test Otomasyonu eğitimi şu başlıkları işler: Selenium ekosistemi ve mimarisi, element bulma ve etkileşim, Page Object Model ile test mimarisi, TestNG ve JUnit ile test çerçevesi, raporlama, loglama ve ekran görüntüsü, CI/CD pipeline ve Selenium Grid.
Müfredat aracı yalnızca komut düzeyinde değil, sürdürülebilir bir test mimarisi, raporlama ve sürekli tümleştirme bağlamında ele alır.
İlgili Mindset programı
Selenium ile Test Otomasyonu
Sık sorulan sorular
Selenium öğrenmek için programlama bilmek gerekir mi?
Evet, temel düzeyde gerekir. Değişkenler, koşullar, döngüler ve nesne yönelimli programlamanın temelleri yeterlidir. Selenium Java, Python, C# ve JavaScript gibi dillerle çalıştığı için ekibinizin kullandığı dili seçmek en pratik yoldur.
Selenium testleri neden bazen kendiliğinden başarısız olur?
En sık neden zamanlama sorunlarıdır: sayfa henüz yüklenmeden elemente erişilmesi. Koşula bağlı beklemeler, kararlı seçiciler ve bağımsız test verisi kararsızlığı azaltır. Testi yalnızca yeniden çalıştırmak çözüm değildir, asıl nedenin bulunması gerekir.
Selenium Grid ne işe yarar?
Selenium Grid, testleri farklı makinelerde ve tarayıcılarda paralel çalıştırmanızı sağlar. Böylece geniş bir test paketi kısa sürede tamamlanır ve çapraz tarayıcı doğrulaması yapılır. Küçük projelerde tek makine yeterli olabilir, Grid kapsam büyüdükçe anlam kazanır.
Page Object Model şart mı?
Zorunlu değildir, ancak testler büyüdükçe bakım yükünü ciddi biçimde azaltır. Seçiciler ve adımlar tek yerde toplandığı için arayüz değişiklikleri küçük bir noktada düzeltilir. Çok küçük bir deneme projesinde gerekmeyebilir, kalıcı bir test paketinde ise önerilir.
Selenium testlerini CI hattına nasıl bağlarım?
Testler komut satırından çalıştırılabilir olmalı ve tarayıcı başsız (headless) modda ya da konteyner içinde açılmalıdır. Her çalıştırma temiz test verisiyle başlar, sonuçlar rapor ve ekran görüntüsüyle kaydedilir. Kararsız testler ana hattı bozmasın diye ayrı izlenir. Hat uzadıkça testler Grid ile paralel koşturulur.
İlgili rehberler
Kategori: Yazılım Geliştirme