Takip et

Selenium ile Web Otomasyonu: Kapsamlı Bir Rehber

Günümüz dijital dünyasında web uygulamalarının kalitesi, kullanıcı deneyimi açısından kritik öneme sahiptir. Peki, bu karmaşık uygulamaların kusursuz çalıştığından ve her zaman beklenen performansı sergilediğinden nasıl emin olabiliriz? İşte tam da bu noktada, yazılım test otomasyonu ve onun en güçlü araçlarından biri olan Selenium devreye giriyor. Bu rehber, Selenium’u sıfırdan öğrenmek ve web otomasyon süreçlerinizi geliştirmek için ihtiyacınız olan her şeyi sunuyor.

Web uygulamalarının hızla geliştiği ve kullanıcı beklentilerinin arttığı bir çağda yaşıyoruz. Her yeni özellik, her yapılan güncelleme, uygulamanın diğer kısımlarını olumsuz etkileme potansiyeli taşır. Manuel test süreçleri bu noktada hem zaman alıcı hem de insan hatasına açık bir hal alır. İşte bu problemleri ortadan kaldırmak için, Selenium gibi otomasyon araçlarına olan ihtiyaç her geçen gün artmaktadır. Peki, bu popüler araç tam olarak nedir ve web otomasyon dünyasında neden bu kadar merkezi bir role sahiptir?

Selenium, web tarayıcıları üzerindeki eylemleri otomatikleştirmek için kullanılan açık kaynaklı bir araç setidir. Geliştiricilerin ve test mühendislerinin, web uygulamalarını farklı tarayıcılar ve platformlar üzerinde test etmelerini sağlar. Temelde, bir insanın tarayıcı üzerinde gerçekleştirebileceği her türlü etkileşimi (tıklama, metin girme, sayfa gezinme vb.) programatik olarak simüle etmeye yarar. Selenium’un kökenleri 2004 yılına dayanır ve o günden bu yana sürekli gelişerek, web otomasyonu alanında adeta bir standart haline gelmiştir.

Selenium’u vazgeçilmez kılan birçok önemli avantajı bulunmaktadır. Öncelikle, çoklu tarayıcı desteği sunar; yani testlerinizi Chrome, Firefox, Edge, Safari gibi farklı tarayıcılarda çalıştırabilirsiniz. Bu, uygulamanızın farklı tarayıcılardaki davranışlarını kolayca doğrulamanıza olanak tanır. İkinci olarak, çoklu dil desteği sayesinde, Java, Python, C#, JavaScript, Ruby ve Kotlin gibi popüler programlama dilleriyle test senaryolarınızı yazabilirsiniz. Bu esneklik, geliştirici ekiplerinin mevcut teknoloji yığınlarına entegrasyonu kolaylaştırır.

Ayrıca, Selenium’un açık kaynak olması, geniş bir topluluğa sahip olmasını ve sürekli olarak yeni özellikler ve hata düzeltmeleri almasını sağlar. Bu durum, aracın güvenilirliğini ve güncelliğini artırır. Maliyet etkinliği açısından da manuel teste göre çok daha avantajlıdır. Otomatik testler, tekrarlayan görevleri çok daha hızlı ve hatasız bir şekilde gerçekleştirebilir, böylece test süreçleri için harcanan zamanı ve kaynakları önemli ölçüde azaltır. Bu sayede, test mühendisleri daha karmaşık senaryolara odaklanabilir ve ürünün kalitesi genel olarak yükselir. Sonuç olarak, Selenium, web uygulamalarının geliştirme döngüsünde kritik bir rol oynayarak, daha hızlı geri bildirim, daha az hata ve daha güvenilir yazılımlar üretilmesine katkıda bulunur.

Uzman İpucu: Selenium, sadece test amaçlı değil, veri kazıma (web scraping) ve RPA (Robotik Süreç Otomasyonu) gibi alanlarda da güçlü bir araç olarak kullanılabilir. Ancak, sitelerin kullanım koşullarını ihlal etmemeye ve yasal sınırlar içinde kalmaya özen gösterin.

Selenium’un Temel Bileşenleri Nelerdir ve Nasıl Çalışırlar?

Selenium, tek bir araçtan ziyade, farklı ihtiyaçlara yönelik olarak tasarlanmış bir araç setidir. Bu setin temelinde üç ana bileşen bulunur: Selenium WebDriver, Selenium IDE ve Selenium Grid. Bu bileşenlerin her biri, web otomasyonu süreçlerinde farklı amaçlar için kullanılır ve birlikte çalışarak kapsamlı bir otomasyon çözümü sunar. Bu bölümde, her bir bileşenin ne işe yaradığını ve nasıl çalıştığını detaylıca inceleyeceğiz.

# Selenium WebDriver: Tarayıcılarla Doğrudan İletişimin Kalbi

Selenium WebDriver, Selenium’un kalbidir ve web otomasyonunun büyük bir kısmını oluşturan en güçlü bileşenidir. Doğrudan tarayıcılarla iletişim kurarak, bir insanın yaptığı gibi web sayfaları üzerinde etkileşimde bulunmayı sağlar. WebDriver, her tarayıcı için özel olarak geliştirilmiş bir sürücü (driver) aracılığıyla çalışır (örn: ChromeDriver for Chrome, GeckoDriver for Firefox). Bu sürücüler, WebDriver API’si üzerinden gelen komutları alır ve bunları tarayıcının anlayabileceği formata çevirerek eylemleri gerçekleştirir.

WebDriver’ın en büyük avantajı, tarayıcının yerel fonksiyonelliğini kullanmasıdır. Bu, testlerin daha hızlı ve daha kararlı çalışmasını sağlar, çünkü JavaScript enjeksiyonu gibi dolaylı yöntemler yerine tarayıcının kendi API’leri kullanılır. Örneğin, bir butona tıklama komutu gönderildiğinde, WebDriver bu komutu tarayıcının sürücüsüne iletir ve sürücü, o butona gerçek bir kullanıcı tıklamış gibi bir olay tetikler. Bu, testlerin gerçek dünya kullanıcı davranışına en yakın şekilde simüle edilmesini sağlar. WebDriver, Java, Python, C#, Ruby, JavaScript gibi birçok programlama dilini destekler, bu da geliştiricilere esneklik sunar.

# Selenium IDE: Hızlı Prototipleme ve Keşifsel Testler İçin

Selenium IDE (Integrated Development Environment), Selenium’un en basit bileşenidir ve bir tarayıcı eklentisi (Chrome veya Firefox için) olarak çalışır. Kod yazma bilgisine sahip olmayan kullanıcılar veya hızlı prototipleme yapmak isteyen geliştiriciler için idealdir. IDE, kullanıcıların bir web sitesinde yaptığı etkileşimleri “kaydet” ve daha sonra “oynat” prensibiyle çalışır. Yani, tarayıcı üzerinde gerçekleştirdiğiniz tıklamaları, metin girişlerini ve sayfa gezinmelerini kaydeder ve bu eylemleri bir test senaryosu olarak saklar.

Selenium IDE’nin sunduğu kolaylıklar arasında, hızlı test geliştirmesi, test adımlarına doğrulama (assert) komutları ekleyebilme ve testleri kolayca düzenleyebilme yeteneği bulunur. Ancak, daha karmaşık senaryolar veya veri güdümlü testler için WebDriver kadar esnek değildir. Genellikle, hızlı keşifsel testler yapmak, hataları yeniden üretmek veya temel regresyon testleri oluşturmak için kullanılır. Kaydedilen testler, daha sonra farklı programlama dillerine (Java, Python vb.) dışa aktarılarak WebDriver tabanlı projelerde temel alınabilir.

# Selenium Grid: Paralel Test Yürütme ve Ölçeklenebilirlik İçin

Büyük ölçekli projelerde veya çok sayıda test senaryosu olduğunda, testleri tek bir makinede ve tek bir tarayıcıda çalıştırmak çok zaman alabilir. İşte bu noktada Selenium Grid devreye girer. Selenium Grid, testlerinizi aynı anda birden fazla makine, tarayıcı ve işletim sistemi üzerinde paralel olarak çalıştırmanıza olanak tanıyan bir sistemdir. Temel olarak, bir “Hub” ve ona bağlı birden fazla “Node”dan oluşur.

Hub, test isteklerini alan merkezi sunucudur. Test senaryosu çalıştırıldığında, Hub’a bir istek gönderilir ve Hub, bu isteği uygun özelliklere (örn: Chrome tarayıcı, Windows işletim sistemi) sahip bir Node’a yönlendirir. Node’lar ise testin gerçekten çalıştırıldığı makinelerdir. Her Node, belirli tarayıcı sürücülerini ve işletim sistemlerini barındırabilir. Bu yapı sayesinde, aynı test paketini eş zamanlı olarak farklı tarayıcı ve platform kombinasyonlarında çalıştırabilir, böylece test süresini önemli ölçüde kısaltır ve test kapsamını artırırsınız. Örneğin, 1000 test senaryosunu 5 farklı tarayıcıda çalıştırmak yerine, Grid kullanarak bu 5 tarayıcıda paralel olarak testleri yürütebilirsiniz. Selenium Grid, özellikle CI/CD (Sürekli Entegrasyon/Sürekli Dağıtım) boru hatlarında testleri otomatikleştirirken ve dağıtılmış test ortamları kurarken kritik bir rol oynar.

  • Selenium WebDriver: Programatik olarak tarayıcı etkileşimlerini otomatikleştiren bir API ve sürücü koleksiyonu.
  • Selenium IDE: Kayıt/oynatma özelliği sunan bir tarayıcı eklentisi ile hızlı test prototipleme aracı.
  • Selenium Grid: Testleri birden fazla makine ve tarayıcıda paralel çalıştırmak için dağıtılmış bir sistem.

Selenium WebDriver ile İlk Web Otomasyon Testinizi Nasıl Geliştirirsiniz?

Selenium’un temel bileşenlerini anladıktan sonra, pratik bir adıma geçme zamanı. Selenium WebDriver ile ilk web otomasyon testinizi geliştirmek, bu güçlü aracın nasıl çalıştığını anlamak için en iyi yoldur. Bu bölümde, adım adım bir test ortamı kuracak ve basit bir senaryo üzerinde ilk otomasyon betiğinizi yazacağız. Amacımız, Google’a gitmek, bir arama yapmak ve sonuçların başarıyla yüklendiğini doğrulamaktır.

Selenium İçin Gerekli Kurulumlar Nelerdir?

Otomasyon testine başlamadan önce bazı temel kurulumlara ihtiyacımız var. Örnek olarak Python programlama dilini kullanacağız, ancak prensipler diğer diller için de benzerdir.

  1. Python Kurulumu: Bilgisayarınızda Python’un kurulu olduğundan emin olun. Kurulu değilse, Python’ın resmi web sitesinden indirebilirsiniz.
  2. Selenium Kütüphanesi Kurulumu: Python’ın paket yöneticisi pip aracılığıyla Selenium kütüphanesini kurun:
    
                pip install selenium
                

  3. Tarayıcı Sürücüsü (WebDriver) Kurulumu: Selenium'un belirli bir tarayıcıyla etkileşime geçebilmesi için o tarayıcının özel sürücüsüne ihtiyacı vardır. Örneğin, Chrome kullanacaksanız ChromeDriver'ı, Firefox için GeckoDriver'ı indirmeniz gerekir. Bu sürücüleri, kullandığınız tarayıcının sürümüne uygun olarak tarayıcı geliştiricilerinin (örn: Google Chrome için ChromeDriver) web sitelerinden indirin. İndirdiğiniz sürücü dosyasını (örn: chromedriver.exe), Python betiğinizin çalıştığı dizine veya sistem PATH'inize ekleyerek erişilebilir hale getirin.

Web Elementlerini Güvenli Bir Şekilde Nasıl Bulursunuz?

Selenium testlerinde en kritik adımlardan biri, web sayfasındaki elementleri (düğmeler, metin kutuları, bağlantılar vb.) doğru bir şekilde bulmaktır. Selenium, bu amaçla çeşitli "locator" stratejileri sunar. İşte en yaygın kullanılanlar:

  • ID: Elementin benzersiz ID özelliği. En güvenilir yöntemlerden biridir. (By.ID)
  • Name: Elementin Name özelliği. (By.NAME)
  • Class Name: Elementin Class özelliği. Birden fazla element aynı sınıfa sahip olabileceğinden dikkatli kullanılmalıdır. (By.CLASS_NAME)
  • Tag Name: Elementin HTML etiketi (örn: div, a, input). Genellikle tekil element bulmak için uygun değildir. (By.TAG_NAME)
  • Link Text / Partial Link Text: Bağlantı metnini veya metnin bir kısmını kullanarak bağlantıları bulma. (By.LINK_TEXT, By.PARTIAL_LINK_TEXT)
  • CSS Selector: CSS seçicileri kullanarak element bulma. Güçlü ve esnek bir yöntemdir. (By.CSS_SELECTOR)
  • XPath: XML Path Language kullanarak element bulma. Çok esnek olsa da performansı CSS Selector'a göre daha düşük olabilir ve kırılgan olabilir. (By.XPATH)

Bu locator'lar, tarayıcının geliştirici araçları (F12) kullanılarak kolayca tespit edilebilir. Bir elementin üzerine sağ tıklayıp "İncele" seçeneğini seçerek ilgili HTML kodunu görebilir ve özelliklerini kopyalayabilirsiniz.

İlk Selenium Test Kodunuz

Şimdi basit bir senaryo için kod yazalım: Google'ı ziyaret et, "Selenium Türkiye" diye ara ve sayfa başlığının arama sonucunu içerdiğini doğrula.


    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC

    # 1. Tarayıcıyı başlat
    # ChromeDriver'ın sistem PATH'inizde olduğundan veya tam yolunu belirttiğinizden emin olun.
    driver = webdriver.Chrome() 

    try:
        # 2. Belirtilen URL'ye git
        driver.get("https://www.google.com")
        print("Google ana sayfası açıldı.")

        # Sayfanın tamamen yüklenmesini beklemek için beklemeler kritik öneme sahiptir.
        # Burada arama kutusunun var olmasını açıkça bekliyoruz.
        search_box = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.NAME, "q"))
        )
        print("Arama kutusu bulundu.")

        # 3. Arama kutusuna metin gir ve Enter tuşuna bas
        search_box.send_keys("Selenium Türkiye")
        search_box.send_keys(Keys.RETURN)
        print("Arama yapıldı: Selenium Türkiye.")

        # 4. Arama sonuçları sayfasının yüklenmesini ve başlığın güncellenmesini bekle
        WebDriverWait(driver, 10).until(
            EC.title_contains("Selenium Türkiye")
        )
        print("Arama başarılı: Sayfa başlığı 'Selenium Türkiye' içeriyor.")

        # İsteğe bağlı: Arama sonuçlarında belirli bir metnin görünüp görünmediğini kontrol et
        assert "Selenium Türkiye" in driver.page_source
        print("Sayfa içeriği 'Selenium Türkiye' metnini içeriyor.")

    except Exception as e:
        print(f"Test sırasında bir hata oluştu: {e}")
    finally:
        # 5. Tarayıcıyı kapat
        driver.quit()
        print("Tarayıcı kapatıldı.")
    

Yukarıdaki kod bloğunda, WebDriverWait ve expected_conditions kullanılarak elementlerin sayfada görünmesi için belirli bir süre beklenir. Bu, testlerin daha kararlı çalışmasını sağlar, çünkü web sayfaları dinamik yükleme sürelerine sahip olabilir. try...except...finally bloğu ise olası hataları yönetmek ve tarayıcının her durumda kapanmasını sağlamak için kullanılır.

Bu örnek, Selenium ile temel bir web otomasyon testini nasıl yazabileceğinizi gösteriyor. Elementleri doğru bir şekilde bulma, onlarla etkileşime geçme ve sonuçları doğrulama adımları, tüm Selenium testlerinin temelini oluşturur. Bu bilgileri kullanarak, daha karmaşık test senaryolarını geliştirmeye başlayabilirsiniz.

Gerçek Bir Senaryo: E-ticaret Sitesi Giriş Akışını Selenium ile Otomatikleştirmek

Teorik bilgileri ve basit bir örnek testini geride bıraktıktan sonra, şimdi gerçek dünya senaryolarına dalalım. Web otomasyonunun en yaygın kullanım alanlarından biri, bir web uygulamasının kritik iş akışlarını otomatik test etmektir. Bir e-ticaret sitesine giriş yapmak, ürün aramak ve sepete eklemek gibi akışlar, uygulamanın temel fonksiyonelliğini temsil eder ve kullanıcı deneyimi açısından hayati öneme sahiptir. Bu akışların manuel olarak sürekli test edilmesi hem sıkıcı hem de insan hatasına açık bir süreçtir. İşte bu noktada Selenium, bize güçlü bir otomasyon çözümü sunar.

Vaka Analizi: E-ticaret Sitesi Giriş ve Ürün Akışı

Hayali bir e-ticaret sitesi olan "TrendyShop" üzerinde aşağıdaki senaryoyu otomatikleştireceğiz:

  1. TrendyShop ana sayfasına git.
  2. "Giriş Yap" düğmesine tıkla.
  3. Kullanıcı adı ve şifre girerek giriş yap.
  4. Girişin başarılı olduğunu doğrula (örn: "Hesabım" menüsünün görünür olması).
  5. Bir ürün ara (örn: "bilgisayar").
  6. Arama sonuçlarından ilk ürünü sepete ekle.
  7. Sepet simgesinin güncellendiğini veya ürünün sepette olduğunu doğrula.

Bu senaryo, bir kullanıcının site ile tipik etkileşimlerini simüle eder. Eğer bu akışlardan herhangi biri başarısız olursa, potansiyel olarak müşteri kaybına yol açabilecek ciddi bir sorun olduğu anlamına gelir.

Otomasyon Betiği ve Açıklamalar

Bu senaryoyu otomatikleştirmek için Python ve Selenium WebDriver kullanacağız. Burada pseudo (sözde) kod kullanarak temel adımları ve element etkileşimlerini göstereceğiz. Gerçek bir senaryoda elementlerin ID, NAME, CSS veya XPath'lerini dikkatlice bulmanız gerekecektir.


    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.common.exceptions import TimeoutException, NoSuchElementException

    # Tarayıcıyı başlat
    driver = webdriver.Chrome()
    driver.maximize_window() # Tarayıcı penceresini tam ekran yap
    
    # Bekleme süresi tanımla
    wait = WebDriverWait(driver, 15) # 15 saniye maksimum bekleme süresi

    try:
        # 1. TrendyShop ana sayfasına git
        print("TrendyShop ana sayfasına gidiliyor...")
        driver.get("https://www.example.com/trendyshop") # Bu URL'yi gerçek site URL'nizle değiştirin
        wait.until(EC.title_contains("TrendyShop"))
        print("Ana sayfa başarıyla yüklendi.")

        # 2. "Giriş Yap" düğmesine tıkla (Örnek bir CSS Selector)
        print("Giriş Yap düğmesi aranıyor...")
        login_button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a.login-btn")))
        login_button.click()
        print("Giriş Yap düğmesine tıklandı.")

        # 3. Kullanıcı adı ve şifre girerek giriş yap
        print("Giriş bilgileri giriliyor...")
        username_field = wait.until(EC.presence_of_element_located((By.ID, "username")))
        password_field = driver.find_element(By.ID, "password") # ID ile bulma
        login_submit_button = driver.find_element(By.XPATH, "//button[contains(text(), 'Giriş Yap')]") # XPath ile bulma

        username_field.send_keys("testkullanici@example.com")
        password_field.send_keys("GucluSifre123!")
        login_submit_button.click()
        print("Giriş yapıldı.")

        # 4. Girişin başarılı olduğunu doğrula
        # "Hesabım" menüsünün veya profil simgesinin görünür olmasını bekle
        print("Girişin doğrulanması bekleniyor...")
        profile_menu = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "a.profile-menu-link")))
        assert profile_menu.is_displayed()
        print("Giriş başarılı: Profil menüsü görüntülendi.")

        # 5. Bir ürün ara (örneğin "bilgisayar")
        print("Ürün araması yapılıyor...")
        search_input = wait.until(EC.presence_of_element_located((By.NAME, "q")))
        search_input.send_keys("bilgisayar")
        search_input.submit() # Formu submit etmenin kolay yolu
        wait.until(EC.title_contains("bilgisayar"))
        print("Arama sonuçları yüklendi.")

        # 6. Arama sonuçlarından ilk ürünü sepete ekle
        print("İlk ürün sepete ekleniyor...")
        first_product_add_to_cart_btn = wait.until(
            EC.element_to_be_clickable((By.CSS_SELECTOR, "div.product-card:first-child .add-to-cart-btn"))
        )
        first_product_add_to_cart_btn.click()
        print("İlk ürün sepete eklendi.")

        # 7. Sepet simgesinin güncellendiğini doğrula
        print("Sepet kontrol ediliyor...")
        cart_count_element = wait.until(EC.visibility_of_element_located((By.ID, "cart-item-count")))
        # Eğer sepet sayacı 0'dan büyükse, ürün eklenmiştir.
        assert int(cart_count_element.text) > 0 
        print(f"Sepette {cart_count_element.text} ürün var. Test BAŞARILI.")

    except TimeoutException:
        print("Element beklenenden daha uzun sürede bulunamadı. Test BAŞARISIZ.")
    except NoSuchElementException:
        print("Belirtilen element sayfada bulunamadı. Test BAŞARISIZ.")
    except AssertionError as e:
        print(f"Doğrulama hatası: {e}. Test BAŞARISIZ.")
    except Exception as e:
        print(f"Beklenmeyen bir hata oluştu: {e}. Test BAŞARISIZ.")
    finally:
        driver.quit()
        print("Tarayıcı kapatıldı.")
    

Bu vaka analizinde, WebDriverWait ve expected_conditions kullanılarak elementlerin sayfada yüklenmesini beklemek, testin kararlılığı için kritik öneme sahiptir. Ayrıca, farklı element bulma stratejilerinin (ID, CSS Selector, XPath) bir arada nasıl kullanılabileceğini de gördük. Hata yönetimi (try...except...finally blokları) sayesinde, testin beklenmedik durumlarda bile düzgün bir şekilde sonlanması ve hata mesajlarının anlamlı olması sağlanır. Bu tür otomatize edilmiş testler, geliştirme sürecinin erken aşamalarında hataları yakalayarak, maliyetli düzeltmelerin önüne geçer ve daha kaliteli bir ürün ortaya konulmasına yardımcı olur.

İleri Düzey Selenium Kullanımı: Test Senaryolarınızı Nasıl Optimize Edebilirsiniz?

Temel Selenium testlerini oluşturmayı öğrendikten sonra, sıra test senaryolarınızı daha yönetilebilir, sürdürülebilir ve verimli hale getirmeye gelir. Büyük ölçekli otomasyon projelerinde, sadece işlevselliği test etmek yeterli değildir; aynı zamanda test kodunun kalitesi ve bakımı da büyük önem taşır. Bu bölümde, test otomasyon projelerinizi bir sonraki seviyeye taşıyacak ileri düzey Selenium tekniklerini ve en iyi uygulamalarını inceleyeceğiz.

Page Object Model (POM) Nedir ve Neden Kullanılmalıdır?

Test kodunun en yaygın sorunlarından biri, element locator'larının doğrudan test betiklerinin içine gömülü olmasıdır. Bu durumda, bir web sayfasının UI'ında küçük bir değişiklik yapıldığında, ilgili tüm test betiklerini güncellemeniz gerekir. Bu da zaman alıcı ve hataya açık bir süreçtir. Page Object Model (POM), bu sorunu çözmek için tasarlanmış bir tasarım desenidir.

POM'da, her bir web sayfası veya sayfanın önemli bir bölümü için ayrı bir "Sayfa Nesnesi" (Page Object) sınıfı oluşturulur. Bu sınıf, o sayfanın tüm web elementlerini (locator'ları ile birlikte) ve o sayfa üzerinde yapılabilecek tüm eylemleri (metotlar olarak) içerir. Örneğin, bir "Giriş Sayfası" için bir Page Object sınıfı, kullanıcı adı alanı, şifre alanı ve giriş butonu gibi elementlerin locator'larını ve login(username, password) gibi metotları içerecektir.

POM kullanmanın avantajları şunlardır:

  • Kodun Yeniden Kullanılabilirliği: Sayfa nesneleri, farklı test senaryolarında tekrar tekrar kullanılabilir.
  • Bakım Kolaylığı: Bir UI elementi değiştiğinde, sadece ilgili sayfa nesnesindeki locator'ı güncellemeniz yeterlidir, tüm test senaryolarını değiştirmenize gerek kalmaz.
  • Daha Okunabilir Testler: Test senaryoları, işlevsel adımları (örn: loginPage.login("user", "pass")) ifade eder, bu da onları daha anlaşılır kılar.
  • Modülerlik: Test kodu ile sayfa etkileşim mantığı ayrıldığı için kod daha modüler hale gelir.

POM, büyük ve karmaşık web uygulamalarının test otomasyonu için kesinlikle önerilen bir yaklaşımdır. Test projenizin ölçeklenebilirliğini ve sürdürülebilirliğini önemli ölçüde artırır.

Headless Tarayıcılar ile Performansı Nasıl Artırırsınız?

Normalde Selenium testlerini çalıştırdığınızda, tarayıcı penceresinin açıldığını ve testin görsel olarak ilerlediğini görürsünüz. Ancak, sunucu ortamlarında veya CI/CD boru hatlarında testleri çalıştırırken, görsel bir arayüze (GUI) ihtiyacınız olmayabilir. Hatta bu GUI, performans düşüşüne veya ek kaynak tüketimine neden olabilir. Headless tarayıcılar, bu sorunu çözmek için tasarlanmıştır.

Headless tarayıcılar, kullanıcı arayüzü olmadan arka planda çalışan tarayıcılardır. Tüm web sayfalarını işlerler ve JavaScript'i çalıştırırlar, ancak bir pencere açmazlar. Bu, testlerin çok daha hızlı çalışmasını sağlar ve sunucu ortamlarında RAM ve CPU tüketimini azaltır. Chrome (Chrome Headless), Firefox (Firefox Headless) ve diğer modern tarayıcılar bu özelliği destekler. Selenium WebDriver'ı headless modda başlatmak oldukça basittir:


    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options

    chrome_options = Options()
    chrome_options.add_argument("--headless") # Headless modu etkinleştir
    chrome_options.add_argument("--disable-gpu") # Windows için bazı durumlarda gerekli olabilir

    driver = webdriver.Chrome(options=chrome_options)
    # Test kodunuz burada devam eder
    driver.get("https://www.google.com")
    print(driver.title)
    driver.quit()
    

Headless tarayıcılar, özellikle sürekli entegrasyon (CI) sistemlerinde hızlı geri bildirim almak ve paralel testleri daha verimli çalıştırmak için kritik öneme sahiptir.

Uzman İpucu: Headless modda çalışırken ekran görüntüleri almak, test başarısızlıklarının kök nedenini anlamak için çok değerli olabilir. Selenium, driver.save_screenshot("hata.png") metodu ile kolayca ekran görüntüsü almanızı sağlar.

Paralel Testler ve Selenium Grid ile Ölçeklenebilirlik

Büyük bir test paketiyle çalışırken, tüm testlerin sırayla çalışmasını beklemek çok uzun sürebilir. Test süresini kısaltmak ve kaynakları daha verimli kullanmak için paralel testler devreye girer. Selenium Grid, bu paralel testleri mümkün kılan dağıtılmış bir test otomasyonu aracıdır. Daha önce bahsettiğimiz gibi, Grid bir Hub ve Node'lardan oluşur.

Testlerinizi paralel çalıştırmak için, test çerçevenizin (örn: Pytest, TestNG) paralel yürütme özelliklerini kullanırsınız ve Selenium Grid'e bağlanmak için RemoteWebDriver'ı kullanırsınız:


    from selenium import webdriver
    from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

    # Grid Hub'ın URL'si
    HUB_URL = "http://localhost:4444/wd/hub"

    # Chrome tarayıcıda test çalıştırma isteği
    driver = webdriver.Remote(
        command_executor=HUB_URL,
        desired_capabilities=DesiredCapabilities.CHROME
    )
    driver.get("https://www.google.com")
    print(driver.title)
    driver.quit()
    

Bu kod parçası, testin yerel bir tarayıcı yerine bir Selenium Grid Node'u üzerinde çalışmasını sağlar. Birden fazla testin aynı anda farklı Node'lar üzerinde çalışmasıyla, toplam test süresi dramatik bir şekilde kısalır. Bu, özellikle büyük regresyon paketleri ve sürekli dağıtım ortamları için vazgeçilmez bir özelliktir. Ek olarak, Selenium Grid, farklı tarayıcı ve işletim sistemi kombinasyonlarında test yapma yeteneği sayesinde uyumluluk testleri için de idealdir.

Bu ileri düzey teknikler, Selenium otomasyon projelerinizin daha sağlam, yönetilebilir, hızlı ve ölçeklenebilir olmasını sağlar. Doğru stratejilerle, web uygulamalarınızın kalitesini sürekli olarak artırabilirsiniz.

Mobil Uyumlu Web Tasarım Testlerinde Selenium'dan Nasıl Faydalanılır?

Mobil cihaz kullanımının yaygınlaşmasıyla birlikte, web uygulamalarının mobil uyumlu (responsive) olması hayati bir gereklilik haline geldi. Bir web sitesinin farklı ekran boyutlarında ve cihazlarda (telefon, tablet) doğru şekilde görüntülendiğinden ve çalıştığından emin olmak, başarılı bir kullanıcı deneyimi için olmazsa olmazdır. Peki, Selenium doğrudan mobil uygulama testi için tasarlanmamış olsa da, responsive web tasarımlarının testinde nasıl bir rol oynayabilir? Bu bölümde, Selenium'un web uygulamalarının mobil uyumluluğunu test etmek için nasıl kullanılabileceğini ve bu süreçte dikkat edilmesi gerekenleri ele alacağız.

Öncelikle, önemli bir ayrımı belirtmek gerekir: Selenium, yerel (native) veya hibrit mobil uygulamaları test etmek için kullanılmaz. Bu tür uygulamalar için Appium gibi özel mobil otomasyon araçları mevcuttur. Ancak Selenium, mobil tarayıcılar üzerinden erişilen web sitelerini veya masaüstü tarayıcılarda mobil görünümü simüle ederek responsive web tasarımlarını test etmek için mükemmel bir araçtır.

Tarayıcı Pencere Boyutunu Ayarlayarak Mobil Görünümü Simüle Etme

Responsive tasarım, CSS medya sorguları (media queries) ve esnek layout'lar kullanarak içeriğin farklı ekran boyutlarına uyum sağlaması prensibine dayanır. Selenium ile bir tarayıcı penceresinin boyutunu programatik olarak değiştirebiliriz. Bu, web uygulamanızın belirli bir mobil cihazın ekran boyutunda nasıl görüneceğini ve davrandığını test etmenizi sağlar.


    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC

    driver = webdriver.Chrome()

    # Masaüstü boyutu
    driver.set_window_size(1920, 1080)
    driver.get("https://www.ornekresponsive.com") # Responsive sitenizin URL'sini girin
    print(f"Masaüstü boyutu: {driver.get_window_size()}")

    # iPhone X boyutlarını simüle et (375x812)
    driver.set_window_size(375, 812)
    print(f"Mobil boyutu (iPhone X): {driver.get_window_size()}")

    # Tablet boyutlarını simüle et (768x1024)
    driver.set_window_size(768, 1024)
    print(f"Tablet boyutu: {driver.get_window_size()}")

    # Farklı boyutlarda elementlerin konumunu, görünürlüğünü veya stilini kontrol et
    # Örneğin, mobil görünümde navigasyon menüsünün gizlenip hamburger ikonunun göründüğünü doğrula
    try:
        wait = WebDriverWait(driver, 10)
        hamburger_icon = wait.until(EC.visibility_of_element_located((By.CLASS_NAME, "hamburger-menu-icon")))
        assert hamburger_icon.is_displayed()
        print("Hamburger menü ikonu mobil görünümde görüntülendi.")

        desktop_nav_menu = driver.find_element(By.CLASS_NAME, "desktop-nav-menu")
        assert not desktop_nav_menu.is_displayed() # Masaüstü menüsünün gizlendiğini doğrula
        print("Masaüstü navigasyon menüsü mobil görünümde gizlendi.")

    except Exception as e:
        print(f"Mobil görünüm testi sırasında hata: {e}")
        
    driver.quit()
    

Bu kod, tarayıcı penceresinin boyutunu değiştirerek farklı cihaz boyutlarını simüle etmenize olanak tanır. Daha sonra, bu boyutlarda belirli elementlerin görünürlüğünü, konumunu veya CSS özelliklerini kontrol edebilirsiniz. Örneğin, mobil görünümde bir navigasyon menüsünün dikey hale gelip gelmediğini veya bir hamburger menü ikonunun görünür hale gelip gelmediğini test edebilirsiniz.

CSS Media Query'leri ve Selenium ile Doğrulama

Responsive tasarımın temelini oluşturan CSS media query'leri, belirli ekran boyutlarına veya cihaz özelliklerine göre farklı stillerin uygulanmasını sağlar. Selenium ile bu stillerin doğru bir şekilde uygulandığını doğrulayabiliriz.


    /* Mobil uyumlu bir CSS media query örneği */
    @media (max-width: 768px) {
        .header-logo {
            width: 80px; /* Mobil görünümde logo küçülsün */
        }
        .main-navigation {
            display: none; /* Mobil görünümde ana navigasyon gizlensin */
        }
        .mobile-menu-toggle {
            display: block; /* Mobil menü butonu gösterilsin */
        }
    }
    

Yukarıdaki CSS örneğini test etmek için Selenium'u şöyle kullanabiliriz:


    # ... driver başlatma ve URL'ye gitme adımları ...

    # Tarayıcıyı mobil boyutuna getir
    driver.set_window_size(400, 600) 

    # .header-logo elementinin stilini kontrol et
    logo_element = driver.find_element(By.CLASS_NAME, "header-logo")
    # 'width' CSS özelliğinin 80px olup olmadığını kontrol et
    assert logo_element.value_of_css_property("width") == "80px"
    print("Logo boyutu mobil görünümde doğru şekilde ayarlandı.")

    # .main-navigation elementinin gizlenip gizlenmediğini kontrol et
    main_nav = driver.find_element(By.CLASS_NAME, "main-navigation")
    assert main_nav.value_of_css_property("display") == "none"
    print("Ana navigasyon mobil görünümde gizlendi.")

    # .mobile-menu-toggle elementinin görünür olup olmadığını kontrol et
    mobile_menu_toggle = driver.find_element(By.CLASS_NAME, "mobile-menu-toggle")
    assert mobile_menu_toggle.value_of_css_property("display") == "block"
    print("Mobil menü düğmesi mobil görünümde görüntülendi.")

    # ... driver.quit() ...
    

Bu yöntemle, CSS media query'lerinin tetiklediği stil değişikliklerini doğrudan doğrulayabilirsiniz. Bu, web sitenizin farklı cihazlarda tutarlı ve doğru bir şekilde görüntülendiğinden emin olmak için güçlü bir yöntemdir. Mobil uyumlu web tasarım testleri, web uygulamanızın geniş bir kitle tarafından erişilebilir ve kullanılabilir olmasını sağlamak için modern otomasyon stratejilerinin ayrılmaz bir parçasıdır.

Sonuç: Selenium ile Web Otomasyonunun Geleceği ve Sıkça Sorulan Sorular

Web uygulamalarının karmaşıklığı arttıkça, Selenium gibi otomasyon araçlarının önemi de katlanarak artmaktadır. Bu makale boyunca, Selenium'un ne olduğundan, temel bileşenlerinden, ilk testinizi nasıl yazacağınızdan ve gerçek dünya senaryolarında nasıl kullanılabileceğinden bahsettik. Ayrıca, Page Object Model, headless tarayıcılar ve paralel testler gibi ileri düzey tekniklerle test senaryolarınızı nasıl optimize edebileceğinizi ve mobil uyumlu web tasarımlarını test etmek için Selenium'dan nasıl faydalanabileceğinizi detaylıca inceledik. Selenium, açık kaynak doğası, geniş topluluk desteği ve esnek API'leri sayesinde web otomasyon alanında liderliğini sürdürmektedir.

Selenium'un geleceği de oldukça parlaktır. Modern tarayıcıların standartlarına uyum sağlaması, sürekli güncellemeler alması ve yeni teknolojilere adaptasyonu, onu uzun yıllar boyunca geçerli bir araç kılacaktır. Diğer otomasyon araçları (örneğin Playwright, Cypress) popülarite kazansa da, Selenium'un geniş dil desteği, olgun ekosistemi ve dağıtık test yetenekleri onu hala birçok şirket ve proje için ilk tercih yapmaktadır. Gelecekte, yapay zeka ve makine öğrenimi destekli testlerin yükselişiyle birlikte, Selenium'un bu yeni teknolojilerle entegrasyonu da test otomasyonunu daha akıllı ve verimli hale getirecektir. Unutmayalım ki, başarılı bir otomasyon projesi sadece doğru aracı seçmekle kalmaz, aynı zamanda iyi bir tasarım, sürdürülebilir kodlama ve sürekli bakım gerektirir. Selenium, bu yolculukta sizin en büyük müttefiklerinizden biri olabilir.

Sıkça Sorulan Sorular (SSS)

Selenium sadece test otomasyonu için mi kullanılır?
Hayır, Selenium sadece test otomasyonu için değil, aynı zamanda veri kazıma (web scraping), web tabanlı görev otomasyonu (RPA) ve tarayıcı etkileşimlerini simüle etmek için de güçlü bir araçtır. Bir tarayıcı üzerinde tekrarlayan herhangi bir görevi otomatikleştirmek için kullanılabilir.
Selenium ile mobil uygulamaları test edebilir miyim?
Selenium, doğrudan yerel (native) veya hibrit mobil uygulamaları test etmek için tasarlanmamıştır. Ancak, mobil tarayıcılar üzerinden erişilen web uygulamalarını veya responsive web tasarımlarını farklı ekran boyutlarında test etmek için kullanılabilir. Mobil uygulama testi için Appium gibi araçlar daha uygundur.
Selenium kullanmak için hangi programlama dillerini bilmem gerekir?
Selenium WebDriver, Java, Python, C#, JavaScript (Node.js), Ruby ve Kotlin gibi birçok popüler programlama dilini destekler. Genellikle Python veya Java, geniş kütüphane ve topluluk desteği nedeniyle yeni başlayanlar için tercih edilen dillerdir.
Selenium testleri neden başarısız olur?
Selenium testlerinin başarısız olmasının birçok nedeni olabilir: elementlerin yüklenmesini beklememek (senkronizasyon sorunları), elementlerin lokasyonlarının veya özelliklerinin değişmesi, tarayıcı uyumsuzlukları, ağ sorunları veya test ortamındaki farklılıklar. Sağlam beklemeler (Explicit Waits) ve dinamik element bulma stratejileri kullanmak bu sorunları minimize eder.
Selenium Grid nedir ve ne zaman kullanmalıyım?
Selenium Grid, testlerinizi birden fazla makine, tarayıcı ve işletim sistemi üzerinde paralel olarak çalıştırmanıza olanak tanıyan bir araçtır. Özellikle büyük ölçekli projelerde test süresini kısaltmak, farklı tarayıcılarda uyumluluk testi yapmak ve CI/CD boru hatlarında test kapsayıcılığını artırmak için kullanışlıdır.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.