Selenium vs Playwright 2026: Dərin Arxitektura və Performans Müqayisəsi
Veb avtomatlaşdırılması dünyasında Selenium uzun illər qlobal sənaye standartı olub. Lakin Microsoft tərəfindən yaradılan Playwright müasir arxitekturası, inanılmaz sürəti və daxili avtomatik gözləmə (auto-waiting) mexanizmi ilə E2E test ekosistemini yenidən formalaşdırır.
1. Arxitektura Müqayisəsi: HTTP WebDriver vs WebSocket CDP/BiDi
Əsas fərq iki alətin brauzerlə necə ünsiyyət qurmasındadır:
Selenium (W3C WebDriver)
Test Kodu → HTTP JSON Wire / W3C → Brauzer Sürücüsü (ChromeDriver) → Brauzer. Hər əmr ayrıca HTTP sorğusu olaraq göndərilir, bu da şəbəkə gecikmələrinə səbəb olur.
Playwright (WebSocket / CDP)
Test Kodu → Tək Davamlı WebSocket Bağlantısı → Brauzerin Daxili Mühərriki. Əmrlər birbaşa və dərhal icra edilir, sıfır HTTP əlavə xərci.
2. Xüsusiyyətlərin Müqayisə Cədvəli
| Meyar | Selenium WebDriver | Microsoft Playwright |
|---|---|---|
| Gözləmə Mexanizmi | Explicit / Implicit wait tələb edir (Flaky test riski) | Avtomatik (Auto-wait for actionability) |
| Paralel İcra | Selenium Grid / TestNG tələb edir | Qutudan çıxarkən daxili Worker prosesləri ilə |
| Şəbəkə İdarəsi & Mocking | Məhdud (DevTools API vasitəsilə) | Tam şəbəkə interceptasiyası və API mocking |
| Multi-Tab & Multi-Origin | Window handle keçidləri ilə mürəkkəb | BrowserContext ilə tam izolyasiya və asan idarə |
| Quraşdırma & Setup | Sürücülər (driver) və framework manual quraşdırılır | Tək npm init playwright@latest əmri ilə hazır |
3. Kod Nümunəsi: Login Testinin Əyani Müqayisəsi
Eyni istifadəçi daxilolma (login) ssenarisinin hər iki alətdə yazılış fərqinə diqqət yetirin. Selenium-da əl ilə gözləmələr (explicit wait) və drayver konfiqurasiyası tələb olunduğu halda, Playwright-da daxili auto-wait və sadə API sayəsində kod 3 dəfə qısalır:
package az.qaacademy.tests; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.support.ui.WebDriverWait; import org.openqa.selenium.support.ui.ExpectedConditions; import org.testng.Assert; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import org.testng.annotations.AfterMethod; import java.time.Duration; public class LoginSeleniumTest { private WebDriver driver; private WebDriverWait wait; @BeforeMethod public void setUp() { driver = new ChromeDriver(); driver.manage().window().maximize(); wait = new WebDriverWait(driver, Duration.ofSeconds(10)); } @Test public void testSuccessfulLogin() { driver.get("https://qaacademy.az/login"); // Elementlərin yüklənməsi üçün əl ilə gözləmə mütləqdir: wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("email"))) .sendKeys("student@qaacademy.az"); driver.findElement(By.id("password")).sendKeys("SecurePassword2026!"); driver.findElement(By.cssSelector("button[type='submit']")).click(); boolean isDashboardVisible = wait.until( ExpectedConditions.visibilityOfElementLocated(By.id("dashboard-welcome")) ).isDisplayed(); Assert.assertTrue(isDashboardVisible, "Dashboard welcome banner should be visible"); } @AfterMethod public void tearDown() { if (driver != null) driver.quit(); } }
package az.qaacademy.tests; import com.microsoft.playwright.*; import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat; import org.testng.annotations.Test; public class LoginPlaywrightTest { @Test public void testSuccessfulLogin() { try (Playwright playwright = Playwright.create()) { Browser browser = playwright.chromium().launch(); Page page = browser.newPage(); page.navigate("https://qaacademy.az/login"); // Playwright daxili auto-wait ilə elementin hazır olmasını avtomatik gözləyir: page.locator("#email").fill("student@qaacademy.az"); page.locator("#password").fill("SecurePassword2026!"); page.locator("button[type='submit']").click(); // Ağıllı web-assertion: timeout və flaky hallar aradan qalxır: assertThat(page.locator("#dashboard-welcome")).isVisible(); } } }
4. 2026-cı İldə Hansını Seçməlisiniz?
Əgər layihəniz sıfırdan başlanırsa və ya sürətli, stabil CI/CD testlərinə ehtiyacınız varsa, Playwright 2026-cı ilin ən üstün seçimidir. Əgər 10 ildən artıq tarixi olan böyük Legacy Java/C# sistemləri ilə işləyirsinizsə, Selenium hələ də öz mövqeyini qoruyur.
Tez-tez Verilən Suallar (FAQ)
Playwright hansı proqramlaşdırma dillərini dəstəkləyir?
Playwright Java, Python, JavaScript və C# (.NET) dillərini rəsmi olaraq tam dəstəkləyir.
Playwright real Safari brauzerində test edirmi?
Playwright Safari-nin mühərriki olan açıq qaynaqlı WebKit mühərrikindən istifadə edir və macOS, Windows və Linux sistemlərində Safari davranışını 99.9% dəqiqliklə simulyasiya edir.
Playwright-a keçmək çətindirmi?
Xeyr, Selenium və ya Cypress təcrübəsi olan QA mühəndisi 1-2 həftə ərzində Playwright-a tam adaptasiya ola bilir.