Skip to content

The E2E tools landscape

Selenium, Cypress, WebDriverIO, Playwright… the names change faster than the ideas. Understanding how each family works inside is worth more than memorizing APIs: the architecture explains their strengths, their limitations and which one fits each project.

The three architectures

  • WebDriver protocol (Selenium, WebDriverIO): commands travel over HTTP to a driver that controls the browser. It's a W3C standard: maximum browser and language compatibility, in exchange for more latency and manual waits.
  • Inside the browser (Cypress): the test runs next to the application, in the browser itself. Excellent feedback and debugging, but structural limitations (multi-tab, multiple origins, supported browsers).
  • Native browser protocols (Playwright, via CDP and equivalents): direct, bidirectional control of the browser from outside. Auto-waiting, cheap isolated contexts and easy parallelization.

Quick comparison

SeleniumWebDriverIOCypressPlaywright
ArchitectureWebDriverWebDriver (and BiDi/CDP)In-browserCDP/native
LanguagesJava, Python, JS, C#…JavaScript/TypeScriptJavaScript/TypeScriptTS/JS, Java, Python, .NET
WaitsExplicit (on you)MixedAutomaticAutomatic
Strong pointStandard, legacy, gridsServices ecosystem and configDX and debuggingSpeed, stability, parallel

Selenium: the minimum you need to know

It's still the industry standard and what shows up most in projects with history:

  • WebDriver is the central object: driver.findElement(By.cssSelector(...)), click(), sendKeys().
  • Waits are your responsibility. The number one cause of flakiness in Selenium is sleep and implicit waits: the right tool is WebDriverWait with explicit conditions (element visible, clickable…).
  • Selenium Grid distributes execution across machines and browsers; it's the conceptual ancestor of modern sharding.
  • The Page Object Model was born in this ecosystem and applies the same way.

WebDriverIO in two lines

A JavaScript framework on top of the WebDriver protocol (today also BiDi/CDP), with a very mature configuration and services system. A middle ground between the Selenium standard and the modern experience: common in JS teams with broad compatibility needs or Appium (mobile).

How to choose

  • New project, TS/JS team, heavy CI → Playwright (my default choice; first steps).
  • Existing suite or compatibility/language requirements → Selenium or WebDriverIO; you don't migrate for fashion, you migrate with numbers.
  • A team that values visual debugging above all → Cypress remains a great experience.

Key idea

Selectors, POM, waits and test design travel with you from one tool to the next. Learn one well and understand the architecture of the others: that's what doesn't expire.

References