İçeriğe geç

Selenium / WebDriver Mimarisi

Selenium, tarayıcı tabanlı test otomasyonu için kullanılan en köklü framework’lerden biridir.
Modern yapısında WebDriver protokolü temelinde çalışır ve istemci–sunucu mimarisi izler.

flowchart LR
A[Test Script (Client)] -->|JSON Wire Protocol / W3C WebDriver| B[Selenium Server / Driver]
B --> C[Browser Engine]
C --> D[Web Application Under Test]

Test senaryoları, tercih edilen bir programlama dili (Java, Python, C#, JS, vb.) ile yazılır.
Bu script, WebDriver API’si aracılığıyla tarayıcı sürücüsüne komut gönderir.

Örnek (Java):

WebDriver driver = new ChromeDriver();
driver.get("https://example.com");
driver.findElement(By.id("login")).click();

WebDriver, istemci (test script) ve tarayıcı arasında aracı sunucu görevi görür.
İstemciden gelen HTTP isteklerini alır, tarayıcıya özgü komutlara dönüştürür ve sonucu JSON formatında geri gönderir.

WebDriver bir “bridge layer” değil, doğrudan tarayıcı motorunu kontrol eden bağımsız bir bileşendir.

Her tarayıcının kendi sürücüsü bulunur:

TarayıcıDriverBinary Adı
ChromeChromeDriverchromedriver.exe
FirefoxGeckoDrivergeckodriver.exe
EdgeEdgeDrivermsedgedriver.exe
SafariSafariDrivermacOS ile entegre

Tarayıcı sürücüsü, WebDriver protokolünü uygular ve tarayıcı motorunun DOM, JS, network gibi katmanlarını kontrol eder.

WebDriver komutlarını alır, DOM üzerinde işlemleri gerçekleştirir ve sonucu sürücüye iletir.
Bu aşamada tarayıcı, sanki kullanıcı eylemlerini manuel olarak yapıyormuş gibi davranır.

  1. Test script’i WebDriver API’sini kullanarak bir HTTP isteği oluşturur.
  2. İstek JSON Wire Protocol (eski) veya W3C WebDriver standardı ile sürücüye gönderilir.
  3. Sürücü, komutu tarayıcı motoruna uygular.
  4. Tarayıcı sonucu sürücüye iletir.
  5. Sürücü, sonucu istemciye JSON olarak döner.

Selenium 4 itibarıyla, W3C WebDriver protokolü tam olarak desteklenmektedir.
Bu sayede:

  • Tarayıcılar arası tutarlılık artmıştır.
  • Paralel testler ve uzaktan sürücüler daha stabil hale gelmiştir.
  • Grid, Docker, ve CI/CD entegrasyonları daha kolay yönetilir.
flowchart TB
A[Test Runner] -->|HTTP| B[Hub]
B --> C1[Node - Chrome]
B --> C2[Node - Firefox]
B --> C3[Node - Edge]
  • Hub: Test komutlarını uygun Node’lara yönlendirir.
  • Node: Belirli tarayıcı türü veya sürümüyle testleri çalıştırır.

Docker Örneği:

Terminal window
docker run -d -p 4444:4444 --name selenium-hub selenium/hub
docker run -d --link selenium-hub:hub selenium/node-chrome
docker run -d --link selenium-hub:hub selenium/node-firefox

KatmanRolÖrnek
Test ScriptKomutları üretirdriver.get()
WebDriver Serverİletişim sağlarchromedriver
Browser Engineİşlemleri yürütürBlink, Gecko
Web UygulamasıTest hedefihttps://app.example.com