Relationships between different versions of Selenium

Published: by Creative Commons Licence

When I first started doing web UI automation a few years back, it was a transition period that Selenium RC started deprecating, Selenium WebDriver just got released, Watir was dominating the Ruby world, WatiN and Watij were still under active development. After all this time, things have been dramatically changed, but left one thing that stays the same - confusing terminologies.

Therefore I made two graphs to help myself reduce the complexity. It might not be fully correct or accurate, but definitely helped me to see the big picture. Any corrections or suggestions would be greatly appreciated.

Different versions of Selenium

History of Selenium Project

Selenium IDE

Firefox add-on Selenium IDE allows users to record and re-play user actions in Firefox. It supports exporting the recorded scripts into Selenium RC or Selenium WebDriver code.

Selenium 1 / Selenium RC

Also known as Selenium 1 incorrectly[1], Selenium Remote Control is the first version of Selenium API, which was generally known as “Selenium” without any version suffixes at the time. After the release of second generation of Selenium, it started to be called with version number or name in order to be distinguishable from the new API. It is now officially deprecated but still released within Selenium WebDriver library for backward compatibility purpose.

Selenium 2 / Selenium WebDriver

Selenium 2, a.k.a. Selenium WebDriver, is the latest API in Selenium project, which replaces Selenium RC with fundamentally different mechanisms and dominates web UI automation market right now.

Selenium 3

The next release of Selenium project, which is only in staging at the time of writing. One possible major change would be breaking the backward compatibility, i.e. Selenium RC will be no longer a part of Selenium release. More details can be followed and discussed in this post on Selenium Developers’ forum.

WebDriver

The term “WebDriver” might have different meanings in various contexts.

  • Synonym for Selenium WebDriver / Selenium 2.

  • A tool called “WebDriver” which was created independently then got merged into Selenium.
    • According to Selenium History, before the era of Selenium 2, WebDriver was a different web testing tool coded by Simon Stewart separately, while probably at the same time, developers within Google were making changes to Selenium RC. After the meeting at GTAC, the decision was made to merge these two projects together into the next generation of Selenium, which is commonly referred as Selenium 2 / Selenium WebDriver. At the time, some people used the word “WebDriver” alone to address this new project, so that users wouldn’t get confused with then dominating project - Selenium RC.

  • WebDriver Wire Protocol (JSON-over-HTTP wire protocol)
    • JsonWireProtocol is the underlying technology used by client side drivers to communicate with server side RemoteWebDriver.

  • WebDriver W3C Specification
    • With the rapid growth of Selenium WebDriver API, the maintainers made it a W3C specification, which is currently released as W3C working draft called “WebDriver” again. This is the specification defines the WebDriver standard API, which is what Selenium WebDriver implements.

Selenium Grid

Selenium Grid is a tool uses Selenium Server to execute either Selenium RC or Selenium WebDriver tests in parallel on different machines.

Selenium

Everything above can be referred as “Selenium” by different people, which in a way confuses the public. All those terminologies are either a part of the current Selenium project, or were once inside Selenium project.

Comparison of Selenium versions

Version Version Comparison
Selenium 1 Selenium RC Essentially the same thing.
Selenium 1 has never been an official name, but is commonly used in order to distinguish between versions.
Selenium 2 Selenium WebDriver Essentially the same thing.
The term "Selenium WebDriver" is now more commonly used.
Selenium RC Selenium WebDriver Selenium RC is the predecessor of Selenium WebDriver.
It has been deprecated and now released inside Selenium WebDriver for backward compatibility.
Selenium IDE Selenium RC/WebDriver Selenium IDE is a recording tool for automating Firefox, with the ability to generate simple RC/WebDriver code.
Selenium RC/WebDriver are frameworks to automate browsers programmatically.
Selenium Grid Selenium WebDriver Selenium Grid is a tool to execute Selenium tests in parallel on different machines.
Selenium WebDriver is the core library to drive web browsers on a single machine.

Selenium Relationships

Anatomy of Selenium Project

Selenium RC Server / Selenium Server

Selenium RC Server was the Java-based package to run Selenium RC tests. With the release of Selenium WebDriver, Selenium (Standalone) Server was introduced as the super-set of the previous version, so that tests can be executed remotely in Selenium Grid mode. For Selenium WebDriver tests that are running locally, Selenium Server is not required.

Selenium / PhantomJS

Being an open-source headless WebKit browser, PhantomJS needs a JavaScript implementation of the WebDriver Wire Protocol in order to work with Selenium WebDriver, therefore GhostDriver kicks in[2]. GhostDriver is used for automating PhantomJS browser, which is similar to the relationship between ChromeDriver and Chrome browser in a sense. However, there is a little bit difference that PhantomJS has GhostDriver integrated inside since 1.8[3], so that no separate GhostDriver binary will be required for running Selenium WebDriver projects.

Selenium WebDriver / WebDriverJS

WebDriverJS is a term that generally considered as the JavaScript binding of Selenium WebDriver, which confusingly may be referred to three different projects.

  • Selenium project itself has an official JavaScript binding for node.js, which has a wiki page titled as “WebDriverJS” and can be installed using:

    npm install selenium-webdriver

  • There is another common third-party WebDriver protocol JS wrapper in the market, called “WebdriverJS” as well and can be installed with:

    npm install webdriverjs

    It has been marketed by the name of webdriver.io/twitter.com/webdriverjs. For more discussion about the differences between these two WebDriverJS projects, please have a look at webdriverjs’ issue#138 on GitHub.

  • WD.js is also a WebDriver JavaScript client and can be found by command:

    npm install wd

Selenium / Appium, ios-driver, Selendroid

With the deprecation of Selenium’s built-in AndroidDriver and IPhoneDriver[4], third party libraries Appium, ios-driver and Selendroid are recommended for automating web applications on mobile devices. They are based on WebDriver project, using the same client API and communicate using the same JSON-over-HTTP-based wire protocol, but are capable of automating native and hybrid applications on mobile platforms[5].

Selenium / Watir

Similar to Selenium’s development, Watir has also experienced two generations, Watir Classic and Watir WebDriver. Watir Classic is to Watir as Selenium RC is to Selenium. During the era of Selenium 1, it was known as “Watir” without any suffixes and had nothing to do with Selenium project but both were popular at the time. Originally Watir was designed in Ruby to support IE only and later expanded for other browsers[6]. Java and .NET versions were created by open source enthusiasts as third party projects, called Watij and WatiN.

However, some time after Selenium WebDriver hit the market, Watir started to wrap around Selenium WebDirver’s Ruby binding to a newer high-level API[7], which is now known as Watir WebDriver. Both being open source frameworks, Selenium WebDriver Ruby binding and Watir WebDriver are led by the same developer, Jari Bakken.

On the other hand, Watij and WatiN, are both no longer under active development unfortunately. The latest releases for Watij and WatiN were made in 2010 and 2011 respectively.

Additional reading


[1]: Comment made here by Jim Evans.

[2]: Getting started with GhostDriver - SelConf2013 - Boston by Ivan De Marino.

[3]: PhantomJS 1.8 Release Notes

[4]: Android and iOS Support (Official Selenium Blog).

[5]: Answer made here by Jim Evans.

[6]: Watir, Selenium & WebDriver by Alister Scott.

[7]: Message from Jari Bakken in Watir mailing list back in 2009.