Relationships between different versions of Selenium
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
- Comparison of Selenium versions
- Selenium Relationships
- Additional reading
Different versions of Selenium
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 incorrectly1, 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
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 in2. 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.83, 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 IPhoneDriver4, 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 platforms5.
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 browsers6. 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 API7, 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
- StackOverflow
- What's the relationship between selenium rc and webdriver?
- What's the relation between Selenium WebDriver and these other tools?
- Difference between Selenium RC and WebDriver
- What are the different versions of Selenium, and which one should I get?
- What is the difference between Selenium Remote Control and Selenium Server?
- What's difference between protractor (Selenium webdriver) VS ghostdirver (phantomjs webdriver)?
- Blog articles
- Introducing WebDriver by Simon Stewart
- Watir gem relationships by Justin Ko
- Watir, Selenium & WebDriver by Alister Scott
-
Getting started with GhostDriver - SelConf2013 - Boston by Ivan De Marino. ↩
-
Android and iOS Support (Official Selenium Blog). ↩
-
Watir, Selenium & WebDriver by Alister Scott. ↩
-
Message from Jari Bakken in Watir mailing list back in 2009. ↩