Developed in collaboration with the Chromium team, ChromeDriver is a standalone server which implements WebDriver's wire protocol.
The ChromeDriver consists of three separate pieces. There is the browser itself ('chrome'), the language bindings provided by the Selenium project ('the driver') and an executable downloaded from the Chromium project which acts as a bridge between 'chrome' and the 'driver'. This executable is called 'chromedriver', but we'll try and refer to it as the 'server' in this page to reduce confusion.
Requirements
The server expects you to have Chrome installed in the default location for each system:
I am having problems with the Selenium chrome driver on my build pc. I am getting periodic failures. When I look at the screen of the build pc I see a chrome window opened with an empty tab. Learn how to download latest Selenium ChromeDriver for Java and how to setup ChromeDriver for windows to run scripts in Google Chrome browser.
OS | Expected Location of Chrome |
---|---|
Linux | /usr/bin/google-chrome1 |
Mac | /Applications/Google Chrome.app/Contents/MacOS/Google Chrome |
Windows XP | %HOMEPATH%Local SettingsApplication DataGoogleChromeApplicationchrome.exe |
Windows Vista and newer | C:Users%USERNAME%AppDataLocalGoogleChromeApplicationchrome.exe |
1 For Linux systems, the ChromeDriver expects /usr/bin/google-chrome to be a symlink to the actual Chrome binary. See also the section on overriding the Chrome binary location .
Quick installation
- Mac users with Homebrew installed:
brew tap homebrew/cask && brew cask install chromedriver
- Debian based Linux distros:
sudo apt-get install chromium-chromedriver
- Windows users with Chocolatey installed:
choco install chromedriver
Getting Started
Read ChromeDriver user documentation
Running ChromeDriver as a standalone process
Since the ChromeDriver implements the wire protocol, it is fully compatible with any RemoteWebDriver client. Simply start up the ChromeDriver executable (that works as a server), create a client, and away you go:
Troubleshooting
If you are using the RemoteWebDriver and you get the The path to the chromedriver executable must be set by the webdriver.chrome.driver system property error message you likely need to check that one of these conditions is met:
- The chromedriver binary is in the system path, or
- The Selenium Server was started with -Dwebdriver.chrome.driver=c:pathtoyourchromedriver.exe
ChromeDriver user documentation provides more information on the known issues and workarounds.
Think you've found a bug?
Check if the bug has been reported yet. If it hasn't, please open a new issue and be sure to include the following:
- What platform are you running on?
- What version of the chromedriver are you using?
- What version of Chrome are you using?
- The failure stacktrace, if available.
- The contents of chromedriver's log file (chromedriver.log).
Chrome Driver Download
Of course, if your bug has already been reported, you can update the issue with the information above. Having more information to work on makes it easier for us to track down the cause of the bug.
Testing earlier versions of Chrome
ChromeDriver is only compatible with Chrome version 12.0.712.0 or newer. If you need to test an older version of Chrome, use Selenium RC and a Selenium-backed WebDriver instance:
More ChromeDriver links
Selenium is an umbrella project encapsulating a variety of tools andlibraries enabling web browser automation. Selenium specificallyprovides infrastructure for the W3C WebDriver specification— a platform and language-neutral coding interface compatible with allmajor web browsers.
The project is made possible by volunteer contributors who'vegenerously donated thousands of hours in code development and upkeep.
Selenium's source code is made available under the Apache 2.0 license.
Documentation
Narrative documentation:
- New Handbook (work in progress)
API documentation:
Pull Requests
Please read CONTRIBUTING.mdbefore submitting your pull requests.
Building
In order to build Selenium, you'll generally use the
./go
command. ./go
is a Rake script,which wraps the main build too, bazel
.Bazel
Bazel was built by the fine folks at Google. Bazel manages dependencydownloads, 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 getthe java and javascript folders to build without errors, you should be confident that you have thecorrect binaries on your system.
Before Building
Ensure that you have Chrome installed and the
chromedriver
that matchesyour Chrome version available on your $PATH
. You may have to update this from time to time.Common Build Targets
To build the most commonly-used modules of Selenium from source, execute this command from the rootproject folder:
If you have some extra time on your hands, you can run this command to get extra confidencethat your build is successful. This will do a lot more work to build all the javascript artifacts:
If you're making changes to the java/ or javascript/ folders in this project, and this commandexecutes without errors, you should be able to create a PR of your changes. (See also CONTRIBUTING.md)
Build Details
- Bazel files are called BUILD.bazel
- crazyfun build files are calledbuild.desc. This is an older build system, still in use in the project
- There is also a main Rakefile
The order the modules are built is determined by the build system. If you want to build anindividual module (assuming all dependent modules have previously been built), try the following:
In this case,
javascript/atoms
is the module directory,test
is a target in that directory's build.desc
file,and run
is the action to run on that target.As you see build targets scroll past in the log,you may want to run them individually. crazyfun can run them individually,by target name, as long as
:run
is appended (see above).To list all available targets, you can append the
-T
flag:Requirements
- The latest version of the Java 11 OpenJDK
java
andjar
on the PATH (make sure you usejava
executable from JDK but not JRE).- To test this, try running the command
javac
. This command won't exist if you only have the JREinstalled. If you're met with a list of command-line options, you're referencing the JDK properly.
- To test this, try running the command
python
on the PATH- The Requests Library for Python:
pip install requests
- MacOS users should have the latest version of XCode installed, including the command-line tools.The following command should work:
Although the build system is based on rake, it's strongly advisedto rely on the version of JRuby in
third_party/
that is invoked bygo
. The only developer type who would want to deviate from this isthe “build maintainer” who's experimenting with a JRuby upgrade.Optional Requirements
- Python 3.4+ (if you want to run Python tests for this version)
- Ruby 2.0
Internet Explorer Driver
If you plan to compile theIE driver,you also need:
- 32 and 64 bit cross compilers
The build will work on any platform, but the tests for IE will beskipped silently if you are not building on Windows.
Common Tasks (Bazel)
To build the bulk of the Selenium binaries from source, run thefollowing command from the root folder:
To build the grid deployment jar, run this command:
To run tests within a particular area of the project, use the 'test' command, followedby the folder or target. Tests are tagged with 'small', 'medium', or 'large', and can be filteredwith the
--test_size_filters
option:Bazel's 'test' command will run all tests in the package, including integration tests. Expectthe
test java/...
to launch browsers and consume a considerable amount of time and resources.Tour
The code base is generally segmented around the languages used towrite the component. Selenium makes extensive use of JavaScript, solet's start there. Working on the JavaScript is easy. First of all,start the development server:
Now, navigate tohttp://localhost:2310/javascript.You'll find the contents of the
javascript/
directory being shown.We use the ClosureLibrary fordeveloping much of the JavaScript, so now navigate tohttp://localhost:2310/javascript/atoms/test.The tests in this directory are normal HTML files with names endingwith
_test.html
. Click on one to load the page and run the test. Youcan run all the JavaScript tests using:Maven POM files
Here is the public Selenium Mavenrepository.
Build Output
./go
only makes a top-level build
directory. Outputs are placedunder that relative to the target name. Which is probably bestdescribed with an example. For the target:The output is found under:
If you watch the build, each step should print where its output isgoing. Java test outputs appear in one of two places: either under
build/test_logs
for JUnit or inbuild/build_log.xml
for TestNGtests. If you'd like the build to be chattier, just append log=true
to the build command line.More general, but basic, help for
go
…go
is just a wrapper aroundRake, so you can use the standardcommands such as rake -T
to get more information about availabletargets.Maven per se
If it is not clear already, Selenium is not built with Maven. It isbuilt with
bazel
, though that is invoked with go
as outlined above,so you do not really have to learn too much about that.That said, it is possible to relatively quickly build Selenium piecesfor Maven to use. You are only really going to want to do this whenyou are testing the cutting-edge of Selenium development (which wewelcome) against your application. Here is the quickest way to buildand deploy into your local maven repository (
~/.m2/repository
), whileskipping Selenium's own tests.The maven jars should now be in your local
~/.m2/repository
.Useful Resources
Refer to the Building WebDriverwiki page for the last word on building the bits and pieces of Selenium.
Bazel Installation/Troubleshooting
MacOS
bazelisk
Bazelisk is a Mac-friendly launcher for Bazel. To install, follow these steps:
XCode
If you're getting errors that mention XCode, you'll need to install the command-line tools.
How To Install Chrome Driver For Selenium
Bazel for Mac requires some additional steps to configure properly. First things first: usethe Bazelisk project (courtesy of philwo), a pure golang implementation of Bazel. In order toinstall 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 bazeliskinstallation. If, however, the return value is /Library/Developer/CommandLineTools/
, you'llneed to redirect the XCode system to the correct value.The first command will prompt you for a password. The second step requires you to read a new XCodelicense, and then accept it by typing 'agree'.
(Thanks to this thread for these steps)