Selenium Architecture
Understanding Selenium architecture is critical for writing stable, scalable, and debuggable automation frameworks. It explains how your test code actually controls a browser.
High-Level Selenium Architectureβ
Selenium follows a clientβserver architecture.
Test Script
β
Selenium Client (Language Binding)
β
WebDriver API
β
Browser Driver
β
Real Browser
Each layer has a clear responsibility.
Selenium Client (Language Binding)β
This is the Selenium library for your programming language.
Examples:
- Java β selenium-java
- Python β selenium
- C# β Selenium.WebDriver
Responsibilities:
- Exposes Selenium APIs
- Translates commands into WebDriver protocol
WebDriverβ
WebDriver is a standardized browser automation interface.
Responsibilities:
- Defines commands like click, sendKeys, navigate
- Acts as a bridge between test code and browser driver
- Uses W3C WebDriver standard
Browser Driversβ
Browser drivers act as adapters between WebDriver and browsers.
Examples:
- ChromeDriver β Chrome
- GeckoDriver β Firefox
- EdgeDriver β Edge
- SafariDriver β Safari
Responsibilities:
- Receive WebDriver commands
- Translate them into browser-specific instructions
Real Browserβ
The actual browser:
- Renders UI
- Executes JavaScript
- Responds to user actions
Selenium does not simulate browsers β it controls real ones.
JSON Wire Protocol vs W3C WebDriverβ
JSON Wire Protocol (Old)β
- Selenium 2 / early Selenium 3
- Non-standard
- Vendor-specific behavior
W3C WebDriver (Current)β
- Standardized protocol
- Selenium 4 compliant
- Cross-browser consistency
Modern Selenium uses only W3C WebDriver.
Why Architecture Mattersβ
Understanding architecture helps with:
- Debugging driver issues
- Solving version mismatches
- Explaining failures in CI
- Designing scalable frameworks
Common Misconceptions ββ
- Selenium directly talks to browser β
- Selenium simulates browser β
- WebDriver = browser β
Key Takeawaysβ
- Selenium uses a layered architecture
- WebDriver is the core interface
- Browser drivers are mandatory
- Selenium 4 uses W3C standard