Jane  Reid

Jane Reid


Selenium: A Browser Automation Framework and Ecosystem


Selenium is an umbrella project encapsulating a variety of tools and libraries enabling web browser automation. Selenium specifically provides an infrastructure for the W3C WebDriver specification — a platform and language-neutral coding interface compatible with all major web browsers.

The project is made possible by volunteer contributors who've generously donated thousands of hours in code development and upkeep.

Selenium's source code is made available under the Apache 2.0 license.


Narrative documentation:

API documentation:

Pull Requests

Please read CONTRIBUTING.md before submitting your pull requests.


  • Bazelisk, a Bazel wrapper that automatically downloads the version of Bazel specified in .bazelversion file and transparently passes through all command-line arguments to the real Bazel binary.
  • The latest version of the Java 11 OpenJDK
  • java and jar on the $PATH (make sure you use java executable from JDK but not JRE).
    • To test this, try running the command javac. This command won't exist if you only have the JRE installed. If you're met with a list of command-line options, you're referencing the JDK properly.
  • Python 3.7+ and python on the PATH
  • Ruby 3+ and ruby on the PATH
  • The tox automation project for Python: pip install tox
  • macOS users:
    • Install the latest version of Xcode including the command-line tools. This command should work xcode-select --install
    • Apple Silicon Macs should add build --host_platform=//:rosetta to their .bazelrc.local file. We are working to make sure this isn't required in the long run.
  • Windows users:
    • Latest version of Visual Studio with command line tools and build tools installed
    • BAZEL_VS environment variable should point to the location of the build tools, e.g. C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools
    • BAZEL_VC environment variable should point to the location of the command line tools, e.g. C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC
    • BAZEL_VC_FULL_VERSION environment variable should contain the version of the installed command line tools, e.g. 14.27.29110
    • A detailed setup guide can be seen on Jim Evan's post
    • If the Jim's blog instructions were followed, also make sure C:\tools\msys65\usr\bin is on the PATH.

Internet Explorer Driver

If you plan to compile the IE driver, you also need:

The build will work on any platform, but the tests for IE will be skipped silently if you are not building on Windows.



Bazel was built by the fine folks at Google. Bazel manages dependency downloads, generates the Selenium binaries, executes tests, and does it all rather quickly.

More detailed instructions for getting Bazel running are below, but if you can successfully get the java and javascript folders to build without errors, you should be confident that you have the correct binaries on your system.

Before Building

Ensure that you have Firefox installed and the latest geckodriver on your $PATH. You may have to update this from time to time.

Common Build Targets


Click to see Java Build Steps

To build the most commonly-used modules of Selenium from source, execute this command from the root project folder:

bazel build java/...

If you want to test you can run then you can do so by running the following command

bazel test //java/... --test_size_filters=small,medium,large --test_tag_filters=<browser>

The test_size_filters argument takes small, medium, large. Small are akin to unit tests, medium is akin to integration tests, and large is akin to end to end tests.

The test_tag_filters allow us to pass in browser names and a few different tags that we can find in the code base.

To build the Grid deployment jar, run this command:

bazel build grid

The log will show where the output jar is located.


Click to see JavaScript Build Steps

If you want to build all the JavaScript code you can run:

bazel build javascript/...

To build the NodeJS bindings you will need to run:

bazel build //javascript/node/selenium-webdriver

To run the tests run:

bazel test //javascript/node/selenium-webdriver:tests

You can pass in the environment variable SELENIUM_BROWSER with the name of the browser.

To publish to NPM run:

bazel run //javascript/node/selenium-webdriver:selenium-webdriver.publish


Click to see Python Build Steps

If you want to build the python bindings run:

bazel build //py:selenium

To run the tests run:

bazel test //py:test-<browsername>

If you add --//common:pin_browsers it will download the browsers and drivers for you to use.

To install locally run:

bazel build //py:selenium-wheel
pip install bazel-bin/py/selenium-*.whl

To publish run:

bazel build //py:selenium-wheel
twine upload bazel-bin/py/selenium-*.whl


Click to see Ruby Build Steps

To build the Ruby code run:

bazel build //rb/...


Click to see .NET Build Steps

To build the .NET code run:

bazel build //dotnet/...


bazel build //dotnet/test/common:chrome

Build Details

Bazel files are called BUILD.bazel, and the order the modules are built is determined by the build system. If you want to build an individual module (assuming all dependent modules have previously been built), try the following:

bazel test javascript/atoms:test

In this case, javascript/atoms is the module directory, test is a target in that directory's BUILD.bazel file.

As you see build targets scroll past in the log, you may want to run them individually.

Build Output

bazel makes a top-level group of directories with the bazel- prefix on each directory.

Common Tasks (Bazel)

To build the bulk of the Selenium binaries from source, run the following command from the root folder:

bazel build java/... javascript/...

To run tests within a particular area of the project, use the "test" command, followed by the folder or target. Tests are tagged with "small", "medium", or "large", and can be filtered with the --test_size_filters option:

bazel test --test_size_filters=small,medium java/...

Bazel's "test" command will run all tests in the package, including integration tests. Expect the test java/... to launch browsers and consume a considerable amount of time and resources.

To bump the versions of the pinned browsers to their latest stable versions:

bazel run scripts:pinned_browsers > temp.bzl && mv temp.bzl common/repositories.bzl

Editing Code

Most of the team use either Intellij IDEA or VS.Code for their day-to-day editing. If you're working in IntelliJ, then we highly recommend installing the Bazel IJ plugin which is documented on its own site.

If you do use IntelliJ and the Bazel plugin, there is a project view checked into the tree in scripts/ij.bazelproject which will make it easier to get up running, and editing code :)


The codebase is generally segmented around the languages used to write the component. Selenium makes extensive use of JavaScript, so let's start there. First of all, start the development server:

bazel run debug-server

Now, navigate to http://localhost:2310/javascript. You'll find the contents of the javascript/ directory being shown. We use the Closure Library for developing much of the JavaScript, so now navigate to http://localhost:2310/javascript/atoms/test.

The tests in this directory are normal HTML files with names ending with _test.html. Click on one to load the page and run the test.

Help with go

More general, but basic, help for go

./go --help

go is a wrapper around Rake, so you can use the standard commands such as rake -T to get more information about available targets.

Maven per se

Selenium is not built with Maven. It is built with bazel, though that is invoked with go as outlined above, so you do not have to learn too much about that.

That said, it is possible to relatively quickly build Selenium pieces for Maven to use. You are only really going to want to do this when you are testing the cutting-edge of Selenium development (which we welcome) against your application. Here is the quickest way to build and deploy into your local maven repository (~/.m2/repository), while skipping Selenium's own tests.

./go maven-install

The maven jars should now be in your local ~/.m2/repository.

Running browser tests on Linux

In order to run Browser tests, you first need to install the browser-specific drivers, such as geckodriver, chromedriver, or edgedriver. These need to be on your PATH.

By default, Bazel runs these tests in your current X-server UI. If you prefer, you can alternatively run them in a virtual or nested X-server.

  1. Run the X server Xvfb :99 or Xnest :99
  2. Run a window manager, for example, DISPLAY=:99 jwm
  3. Run the tests you are interested in:
bazel test --test_env=DISPLAY=:99 //java/... --test_tag_filters=chrome

An easy way to run tests in a virtual X-server is to use Bazel's --run_under functionality:

bazel test --run_under="xvfb-run -a" //java/... --test_tag_filters=chrome

Bazel Installation/Troubleshooting

Selenium Build Docker Image

If you're finding it hard to set up a development environment using bazel and you have access to Docker, then you can build a Docker image suitable for building and testing Selenium in from the Dockerfile in the dev image directory.



Bazelisk is a Mac-friendly launcher for Bazel. To install, follow these steps:

brew tap bazelbuild/tap && \
brew uninstall bazel; \
brew install bazelbuild/tap/bazelisk


If you're getting errors that mention Xcode, you'll need to install the command-line tools.

Bazel for Mac requires some additional steps to configure properly. First things first: use the Bazelisk project (courtesy of philwo), a pure golang implementation of Bazel. In order to install Bazelisk, first verify that your Xcode will cooperate: execute the following command:

xcode-select -p

If the value is /Applications/Xcode.app/Contents/Developer/, you can proceed with bazelisk installation. If, however, the return value is /Library/Developer/CommandLineTools/, you'll need to redirect the Xcode system to the correct value.

sudo xcode-select -s /Applications/Xcode.app/Contents/Developer/
sudo xcodebuild -license

The first command will prompt you for a password. The second step requires you to read a new Xcode license, and then accept it by typing "agree".

(Thanks to this thread for these steps)

Author: SeleniumHQ
Source Code: https://github.com/SeleniumHQ/selenium
License: Apache-2.0 License


What is GEEK

Buddha Community

Selenium: A Browser Automation Framework and Ecosystem
Anthony  Dach

Anthony Dach


How To Get Attribute Value In Selenium WebDriver

While you are automating your test cases with Selenium automation, here is how to start implementing Selenium getAttribute() method to get the best results.


Testing a web page can be a gargantuan task, considering all the elements and variables that come together to make a page work. Selenium automation is a great way to overcome these challenges and automate everything you would manually do. For example, Selenium makes it so much easier to take a screenshot using Python instead of doing it manually every time you come across a website issue.

Similarly, there are multiple scenarios while writing automation test cases when we need to verify a specific attribute on the web page. To ease our execution, the method to getAttribute() in Selenium comes to the rescue. In this blog, we will understand what an attribute is and how we can handle web elements’ attributes using the Selenium getAttribute() method.

Let’s get to it, shall we?

#selenium #webdriver #selenium automation testing #selenium automation #selenium - web browser automation #selenium automated testing #get attribute

Anthony  Dach

Anthony Dach


Automated Cross Browser Testing With Jasmine Framework & Selenium

In today’s fast-paced world of software development, we have new technologies and languages for development coming on very frequently. With this comes several testing and automation tools and frameworks in the related market. Choosing the right set of tools and frameworks becomes an absolute necessity because it impacts the accuracy and TTM (Time to Market).

JavaScript is one of the widely used programming languages for web automation testing. It also supports a number of Selenium automation testing frameworks for web UI testing. Of all the available ones, Jasmine JavaScript testing framework turns out to be the best-suited, as it provides a stable and functional architecture. It is easy to get started with Jasmine and is also easy to implement test scenarios with the same.

In this Selenium automation testing tutorial, we look into the nitty-gritty of the Jasmine JavaScript testing framework from an automation testing standpoint. We will also learn how to set it up, followed by a sample code writing and execution. In subsequent sections of this Selenium Jasmine tutorial, we will also learn how to run Jasmine JavaScript tests at scale on a cloud-based Selenium Grid like LambdaTest.

So let’s get started!!


#automation #cross browser testing #javascript #automated cross browser testing with jasmine framework & selenium #asmine framework & selenium

Anthony  Dach

Anthony Dach


What's New in Selenium 4?

The newly released Selenium 4 is creating a lot of buzz and the complete testing community is looking forward to exploring its updated features.

Selenium has gone through a tremendous evolution since its introduction and that’s the reason today it is the most popular and powerful automation testing tool. The newly released Selenium 4 is creating a lot of buzz and the complete testing community is looking forward to exploring its updated features.

Before we dive into Selenium 4, let’s have a brief introduction to its previous versions. Selenium 1 was declared as the free open source automation testing framework in the year 2004 consisting of selenium IDE, RC, and web driver. Whereas, the Selenium 2 released in 2011 consisted of the IDE, Web driver, and Grid. The RC server was merged with the web driver, as the web driver facilitated easy automation scripting for the browsers. Selenium 3 was officially released in 2016. One of the most noticeable changes in selenium 3 was the replacement of the selenium core with the web driver-backed option, the introduction of the gecko driver, and W3C web driver integration.

With the aim of executing much seamless, accurate and faster test automation, Selenium 4 was released on 24th April 2019. So let’s unleash all the major features of selenium 4 which sets it apart from the earlier versions delivering better test automation. There are a lot of exciting features in Selenium 4 across the complete suite i.e. Selenium IDE, Webdriver and Grid. In Selenium 4 though the Webdriver captures the spotlight, we will cover the updated features of selenium IDE and selenium grid. So first of all let’s define the different user groups for the Selenium suite.

Selenium is a suite of tools that caters to the various requirements of the project such as:

  • Selenium IDE (Integrated Development Environment) Supports Rapid test development. This record/run tool helps in preparing test cases. Selenium IDE is an easy-to-use tool from the Selenium Test Suite which is used for developing automated test cases for web applications.
  • Selenium Webdriver provides flexible and seamless automation through a friendly and flexible API. It can perform automation in almost all programming languages.
  • The grid helps in providing automation testing by distributing and running the test cases in multiple machines simultaneously.

Let us explore the features of Selenium 4 across the different Selenium Tools.

#selenium #automation testing #selenium automation #selenium automated testing #selenium test automation #selenium 4

Brain  Crist

Brain Crist


Why Selenium Grid Is Ideal For Automated Browser Testing?

Manual cross-browser testing is neither efficient nor scalable as it will take ages to test on all permutations and combinations of browsers, operating systems, and their versions. Like every developer, I have also gone through that ‘I can do it all phase’. But if you are stuck validating your code changes over hundreds of browsers and OS combinations then your release window is going to look even shorter than it already is. This is why automated browser testing can be pivotal for modern-day release cycles as it speeds up the entire process of cross-browser compatibility .

#performance #cross browser testing #selenium automation testing #test automation tools #selenium - web browser automation #selenium grid

Anthony  Dach

Anthony Dach


How to Perform Localization Testing Using Selenium WebDriver

Localization automation testing is essential for your product to gain good standing globally. Read on to learn how to do localization testing using Selenium WebDriver.

Automation testing is vital to the entire process of delivering a successful web product. The challenge associated with testing a web site or web app grows exponentially if it’s built for a global audience (particularly non-English audience). Automation tests have to be performed to ensure that the product features (including the content) cater to specific locales. That’s why localization testing using Selenium WebDriver has become increasingly relevant when a plethora of software products are being built for the world!

We’re sure you’ve come across scenarios where some content or portion of the website did not render correctly in a specific location. This is a common dilemma that most Selenium test automation engineers often come across, and it is extremely likely that incorrectly formatted strings are a part of the resource files. As a part of localization testing using Selenium WebDriver, we need to verify if the website (or app) looks and functions the same after localization automation testing is applied.

That is precisely what this blog aims to deliver. By the end of this blog, you would be comfortable performing localization testing using Selenium WebDriver as we touch upon the critical aspects of localization, including how to perform localization automation testing.

#tutorial #performance #automation testing #selenium webdriver #localization #selenium automation #selenium automated testing #automation selenium