TradieJoeys Logo

Engineering quality in software

WebDriver
WebDriver, drivers & language bindings
Relation between the three

WebDriver is an API and protocol that defines a language-neutral interface for controlling the behaviour of web browsers. Each browser is backed by a specific WebDriver implementation, called a driver, written by the browser vendor, usually in a systems language.

Browser Driver Written in Maintained by
Chrome/ Edge chromedriver, msedgedriver C++ Google/ Microsoft
Firefox geckodriver Rust Mozilla
Safari safaridriver Objective-C / Swift (macOS native) Apple
Opera operadriver C++ (based on Chromium) Opera Software

These drivers are standalone server programs that implement the W3C WebDriver protocol, which is an HTTP+JSON REST-like interface. They listen on a port (e.g., 9515) for commands such as POST /session, POST /element, etc.

The "bindings" are the client libraries used to write automation code in a preferred language - Python, Java, JavaScript, C#, Ruby, etc.

Language Binding (client library) Example package
Python selenium-python pip install selenium
Java selenium-java Maven dependency
C# selenium-dotnet NuGet
JS/ TS selenium-webdriver npm package

Each binding knows how to

  • Translate method calls (river.get(), find_element(), etc.)
  • into HTTP requests (JSON payloads) and
  • send them to the corresponding browser driver’s REST endpoint

The upshot

The language bindings don't care what the driver is written in, and vice versa. The drivers and bindings just speak the same JSON-over-HTTP protocol.

Sudhir Shetty, Nov 26 2025.