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.
Genel Mimari
Section titled “Genel Mimari”flowchart LRA[Test Script (Client)] -->|JSON Wire Protocol / W3C WebDriver| B[Selenium Server / Driver]B --> C[Browser Engine]C --> D[Web Application Under Test]1. Test Script (Client)
Section titled “1. Test Script (Client)”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();2. WebDriver (Server)
Section titled “2. WebDriver (Server)”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.
3. Browser Driver
Section titled “3. Browser Driver”Her tarayıcının kendi sürücüsü bulunur:
| Tarayıcı | Driver | Binary Adı |
|---|---|---|
| Chrome | ChromeDriver | chromedriver.exe |
| Firefox | GeckoDriver | geckodriver.exe |
| Edge | EdgeDriver | msedgedriver.exe |
| Safari | SafariDriver | macOS ile entegre |
Tarayıcı sürücüsü, WebDriver protokolünü uygular ve tarayıcı motorunun DOM, JS, network gibi katmanlarını kontrol eder.
4. Browser Engine
Section titled “4. Browser Engine”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.
İletişim Akışı
Section titled “İletişim Akışı”- Test script’i
WebDriverAPI’sini kullanarak bir HTTP isteği oluşturur. - İstek JSON Wire Protocol (eski) veya W3C WebDriver standardı ile sürücüye gönderilir.
- Sürücü, komutu tarayıcı motoruna uygular.
- Tarayıcı sonucu sürücüye iletir.
- Sürücü, sonucu istemciye JSON olarak döner.
W3C WebDriver Standardı
Section titled “W3C WebDriver Standardı”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.
Selenium Grid Entegrasyonu
Section titled “Selenium Grid Entegrasyonu”flowchart TBA[Test Runner] -->|HTTP| B[Hub]B --> C1[Node - Chrome]B --> C2[Node - Firefox]B --> C3[Node - Edge]Grid Bileşenleri
Section titled “Grid Bileşenleri”- 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:
docker run -d -p 4444:4444 --name selenium-hub selenium/hubdocker run -d --link selenium-hub:hub selenium/node-chromedocker run -d --link selenium-hub:hub selenium/node-firefox| Katman | Rol | Örnek |
|---|---|---|
| Test Script | Komutları üretir | driver.get() |
| WebDriver Server | İletişim sağlar | chromedriver |
| Browser Engine | İşlemleri yürütür | Blink, Gecko |
| Web Uygulaması | Test hedefi | https://app.example.com |