Research
Security News
Threat Actor Exposes Playbook for Exploiting npm to Build Blockchain-Powered Botnets
A threat actor's playbook for exploiting the npm ecosystem was exposed on the dark web, detailing how to build a blockchain-powered botnet.
selenium-standalone
Advanced tools
installs a `selenium-standalone` command line to install and start a standalone selenium server
The selenium-standalone npm package is a tool that allows you to easily install and run a standalone Selenium server. This is useful for running automated tests in various browsers without needing to manually set up the Selenium server and browser drivers.
Install Selenium Server and Browser Drivers
This feature allows you to install the Selenium server and browser drivers (e.g., ChromeDriver, GeckoDriver) with a single command. The code sample demonstrates how to install the latest versions of the Selenium server and drivers for Chrome and Firefox.
const selenium = require('selenium-standalone');
selenium.install({
version: 'latest',
baseURL: 'https://selenium-release.storage.googleapis.com',
drivers: {
chrome: { version: 'latest' },
firefox: { version: 'latest' }
},
logger: function(message) {
console.log(message);
}
}, function(err) {
if (err) { return console.error(err); }
console.log('Selenium and drivers installed successfully');
});
Start Selenium Server
This feature allows you to start the Selenium server programmatically. The code sample demonstrates how to start the Selenium server and log a message upon successful startup.
const selenium = require('selenium-standalone');
selenium.start(function(err, child) {
if (err) { return console.error(err); }
console.log('Selenium server started successfully');
// child is a ChildProcess instance
});
Stop Selenium Server
This feature allows you to stop the Selenium server programmatically. The code sample demonstrates how to start the Selenium server and then stop it after 10 seconds.
const selenium = require('selenium-standalone');
selenium.start(function(err, child) {
if (err) { return console.error(err); }
console.log('Selenium server started successfully');
// Stop the server after 10 seconds
setTimeout(() => {
child.kill();
console.log('Selenium server stopped');
}, 10000);
});
webdriver-manager is a tool for managing WebDriver binaries. It can download, update, and start WebDriver binaries for different browsers. Unlike selenium-standalone, which focuses on running a standalone Selenium server, webdriver-manager is more focused on managing the WebDriver binaries themselves.
selenium-webdriver is the official Selenium package for Node.js. It provides bindings for the WebDriver API and allows you to write automated tests for web applications. While selenium-standalone focuses on setting up and running the Selenium server, selenium-webdriver is used for writing and executing the tests themselves.
Nightwatch is an end-to-end testing framework that uses the WebDriver API. It provides a higher-level API for writing tests and includes built-in support for running tests with Selenium. Nightwatch can manage the Selenium server and browser drivers, similar to selenium-standalone, but it also includes additional features for writing and organizing tests.
Table of Contents generated with DocToc
A node based CLI library for launching Selenium with WebDrivers support.
Supported WebDrivers:
As global npm package
npm install selenium-standalone@latest -g
selenium-standalone install && selenium-standalone start
As a local npm package
npm install selenium-standalone --save-dev
./node_modules/.bin/selenium-standalone install && ./node_modules/.bin/selenium-standalone start
As a Docker service
docker run -it -p 4444:4444 vvoyer/selenium-standalone
# 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
# install a single driver within the default list (chrome, ie, edge, firefox, chromiumedge)
selenium-standalone install --singleDriverInstall=chrome
# 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.39',
arch: process.arch,
baseURL: 'https://chromedriver.storage.googleapis.com'
},
},
}
Here you can find an up-to-date example of the configuration object: lib/default-config.js
var selenium = require('selenium-standalone');
selenium.install({
// check for more recent versions of selenium here:
// https://selenium-release.storage.googleapis.com/index.html
version: '3.8.1',
baseURL: 'https://selenium-release.storage.googleapis.com',
drivers: {
chrome: {
// check for more recent versions of chrome driver here:
// https://chromedriver.storage.googleapis.com/index.html
version: '2.39',
arch: process.arch,
baseURL: 'https://chromedriver.storage.googleapis.com'
},
ie: {
// check for more recent versions of internet explorer driver here:
// https://selenium-release.storage.googleapis.com/index.html
version: '3.9.0',
arch: process.arch,
baseURL: 'https://selenium-release.storage.googleapis.com'
}
},
ignoreExtraDrivers: true,
proxy: 'http://localproxy.com', // see https://github.com/request/request#proxies
requestOpts: { // see https://github.com/request/request#requestoptions-callback
timeout: 10000
},
logger: function(message) {
},
progressCb: function(totalLength, progressLength, chunkLength) {
}
}, cb);
opts.version
selenium version to install.
opts.drivers
map of drivers to download and install along with selenium standalone server.
The current defaults can be found in lib/default-config.js.
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.ignoreExtraDrivers
only downloads and installs drivers explicity specified.
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.
opts.requestOpts
can be any valid request
options object. You can use this for example to set a timeout.
cb(err)
called when install finished or errored.
opts.version
selenium version to install.
opts.drivers
map of drivers to run along with selenium standalone server, same
as selenium.install
.
opts.ignoreExtraDrivers
only loads and starts drivers explicity specified.
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')
.
opts.requestOpts
can be any valid request
options object. You can use this for example to set a timeout.
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
By default, google chrome, firefox and phantomjs are available when installed on the host system.
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
With the release of Selenium 3+, the minimum required version of Java is 8, as 7 has ceased public updates.
If an older selenium version is needed, you can check the requirements on the official Selenium changelog.
Here is a reference sheet for the more recent Selenium version:
Selenium version | Minimum Java Required |
---|---|
3.0.0+ | Java 8 |
2.47.0+ | Java 7 |
2.22.0+ | Java 6 |
On linux,
To run headlessly, you can use xvfb:
xvfb-run --server-args="-screen 0, 1366x768x24" selenium-standalone start
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) {
// child.stderr now sent to your `process.stderr`
});
At times you may need to get debug logs for what selenium-standalone
is doing. In your environment variables set DEBUG=selenium-standalone:*
. This will enable extra log statements to be shown in stderr.
Example:
$ DEBUG=selenium-standalone:* selenium-standalone install --drivers.chrome.version=2.15
selenium-standalone:env-details Platform: darwin +0ms
selenium-standalone:env-details Architecture: x64 +3ms
selenium-standalone:env-details Node.js: v6.9.4 +2ms
selenium-standalone:cli Started via CLI with: [ '/usr/local/bin/node',
'/tmp/selenium-standalone/bin/selenium-standalone',
'install',
'--drivers.chrome.version=2.15' ]
...
npm run release [major|minor|patch|x.x.x]
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
6.20.1 (2020-10-09)
FAQs
installs a `selenium-standalone` command line to install and start a standalone selenium server
The npm package selenium-standalone receives a total of 111,243 weekly downloads. As such, selenium-standalone popularity was classified as popular.
We found that selenium-standalone demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
A threat actor's playbook for exploiting the npm ecosystem was exposed on the dark web, detailing how to build a blockchain-powered botnet.
Security News
NVD’s backlog surpasses 20,000 CVEs as analysis slows and NIST announces new system updates to address ongoing delays.
Security News
Research
A malicious npm package disguised as a WhatsApp client is exploiting authentication flows with a remote kill switch to exfiltrate data and destroy files.