selenium-standalone
Command line or programmatic install and launch of selenium standalone
server, chrome driver, internet explorer driver, firefox driver and phantomjs
It will install a selenium-standalone
command line that will be able to install
selenium server and start
firefox, chrome, internet explorer or phantomjs for your tests.
npm install selenium-standalone@latest -g
selenium-standalone install
selenium-standalone start
Command line interface
# simple, use defaults and latest selenium
selenium-standalone install
selenium-standalone start
# install defaults, but silently
selenium-standalone install --silent
# specify selenium args, everything after -- is for selenium
selenium-standalone start -- -debug
# choose selenium version
selenium-standalone install --version=2.45.0 --baseURL=https://selenium-release.storage.googleapis.com
# choose chrome driver version
selenium-standalone install --drivers.chrome.version=2.15 --drivers.chrome.baseURL=https://chromedriver.storage.googleapis.com
# choose ie driver architecture
selenium-standalone start --drivers.ie.arch=ia32 --drivers.ie.baseURL=https://selenium-release.storage.googleapis.com
# specify hub and nodes to setup your own selenium grid
selenium-standalone start -- -role hub
selenium-standalone start -- -role node -hub http://localhost:4444/grid/register
selenium-standalone start -- -role node -hub http://localhost:4444/grid/register -port 5556
# If you have a complex configuration with numerous options or if you want to keep a clear configuration changes history,
# you can specify the options in a configuration file :
selenium-standalone install --config=/path/to/config.json
selenium-standalone start --config=./config/seleniumConfig.js
Config file can be a JSON file or a module file that exports options as an object:
module.exports = {
drivers: {
chrome: {
version: '2.23',
arch: process.arch,
baseURL: 'https://chromedriver.storage.googleapis.com'
},
},
}
Application Programming Interface (API)
Sample configuration object
Here you can find an up-to-date example of the configuration object:
lib/default-config.js
Example
var selenium = require('selenium-standalone');
selenium.install({
version: '2.53.1',
baseURL: 'https://selenium-release.storage.googleapis.com',
drivers: {
chrome: {
version: '2.23',
arch: process.arch,
baseURL: 'https://chromedriver.storage.googleapis.com'
},
ie: {
version: '2.53.1',
arch: process.arch,
baseURL: 'https://selenium-release.storage.googleapis.com'
}
},
proxy: 'http://localproxy.com',
logger: function(message) {
},
progressCb: function(totalLength, progressLength, chunkLength) {
}
}, cb);
selenium.install([opts,] cb)
opts.version
selenium version to install.
opts.drivers
map of drivers to download and install along with selenium standalone server.
Here are the current defaults:
{
chrome: {
version: '2.23',
arch: process.arch,
baseURL: 'https://chromedriver.storage.googleapis.com'
},
ie: {
version: '2.53.1',
arch: process.arch,
baseURL: 'https://selenium-release.storage.googleapis.com'
}
}
arch
is either ia32
or x64
, it's here because you might want to switch to a particular
arch sometimes.
baseURL
is used to find the server having the selenium or drivers files.
opts.basePath
sets the base directory used to store the selenium standalone .jar
and drivers. Defaults to current working directory + .selenium/
opts.progressCb(totalLength, progressLength, chunkLength)
will be called if provided with raw bytes length numbers about the current download process. It is used by the command line to show a progress bar.
opts.logger
will be called if provided with some debugging information about the installation process.
cb(err)
called when install finished or errored.
selenium.start([opts,] cb)
opts.drivers
map of drivers to run along with selenium standalone server, same
as selenium.install
.
opts.basePath
sets the base directory used to load the selenium standalone .jar
and drivers, same as selenium.install
.
By default all drivers are loaded, you only control and change the versions or archs.
opts.spawnOptions
spawn options for the selenium server. Defaults to undefined
opts.javaArgs
array of arguments for the JVM, included between java
and -jar
in the command line invocation. Use this option to set properties like -Xmx=512M
or -Djava.util.logging.config.file=logging.properties
, for instance. Defaults to []
.
opts.seleniumArgs
array of arguments for the selenium server, passed directly to child_process.spawn. Defaults to []
.
opts.spawnCb
will be called if provided as soon as the selenium child process was spawned. It may be interesting if you want to do some more debug.
opts.javaPath
set the javaPath manually, otherwise we use [which](https://github.com/isaacs/node-which).sync('java')
cb(err, child)
called when the server is running and listening, child is the ChildProcess instance created.
So you can child.kill()
when you are done.
Error: Another Selenium process is already running
If you're getting this error, it means that you didn't shut down the server successfully the last time you started it, so it's still running in the background. You can kill it by running:
pkill -f selenium-standalone
Available browsers
By default, google chrome, firefox and phantomjs are available
when installed on the host system.
Tips
Start Selenium whenever your (ubuntu) machine starts!
After installing selenium-standalone globally, execute the following commands to run selenium-standalone when your machine starts!
ln -s /usr/local/bin/selenium-standalone /etc/init.d/
update-rc.d selenium-standalone defaults
For more information: https://stackoverflow.com/questions/3666794/selenium-server-on-startup/30392437#30392437
Running headlessly
On linux,
To run headlessly, you can use xvfb:
xvfb-run --server-args="-screen 0, 1366x768x24" selenium-standalone start
Logging
By default, Selenium sends logging messages to stderr.
The selenium-standalone cli tool (selenium-standalone start
) will output the logging messages to your process.stderr
. So you do see them in the console.
If you are using the programmatic API, you can retrieve the stderr
messages by doing this:
var selenium = require('selenium-standalone');
selenium.start(function(err, child) {
child.stderr.on('data', function(data){
console.log(data.toString());
});
});
You can also forward the stderr
to your process.stderr
like the cli does:
var selenium = require('selenium-standalone');
selenium.start({
spawnOptions: {
stdio: 'inherit'
}
}, function(err, child) {
});
Examples of combining with other tools
Error: unable to get local issuer certificate
This error might happen when you are behind a specific proxy. Then you need to set some environement variables:
NODE_TLS_REJECT_UNAUTHORIZED=0 selenium-standalone install`
NODE_TLS_REJECT_UNAUTHORIZED=0 selenium-standalone start
On Windows:
setx NODE_TLS_REJECT_UNAUTHORIZED 0