Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.
Sign upGetting Started with Hub and Nodes
Getting Started with Hub & Nodes
This is a step-by-step introduction to using the official Selenium Docker images using a basic hub/node configuration.
Step 1: Pulling down the hub / nodes
$ docker pull selenium/hub selenium/node-chrome selenium/node-firefox
This will pull from hub.docker.com, the three official images. Note: when you omit a version at the end, it will default to "latest" tag. To specify a version, simply add
:<version>at the end. E.g:selenium/hub:3.3.1
Step 2: Bringing up the hub / nodes
Now that we have the images pulled down, let's run them.
A note about using --link in the examples
This option can be used for a single host scenario (hub and nodes running in a single machine), but it is not recommended for longer term usage since this is a docker legacy feature. It could serve you as an option for a proof of concept, and for simplicity it is used in the examples shown from now on. To use the images without --link please check this section.
Running the Hub
$ docker run -p 4444:4444 --name selenium-hub selenium/hub
# Run the hub, forwarding the "4444" port from the docker container to the host machine.Running the Chrome node
$ docker run --link selenium-hub:hub selenium/node-chrome
# Run the chrome node and link it to the `--name` we specified for the hub.Running the Firefox node
$ docker run --link selenium-hub:hub selenium/node-firefox
# Run the firefox node and link it to the `--name` we specified for the hub.Step 3: Running tests
Note: Please consult the official documentation if you are having issues with the following code.
Java
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
public class MyTest {
Capabilities chromeCapabilities = DesiredCapabilities.chrome();
Capabilities firefoxCapabilities = DesiredCapabilities.firefox();
public static void main() {
WebDriver chrome = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), chromeCapabilities);
WebDriver firefox = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), firefoxCapabilities);
// run against chrome
chrome.get("https://www.google.com");
System.out.println(chrome.getTitle());
// run against firefox
firefox.get("https://www.google.com");
System.out.println(firefox.getTitle());
chrome.quit();
firefox.quit();
}
}Ruby
require 'selenium-webdriver'
chrome_capabilities = Selenium::WebDriver::Remote::Capabilities.chrome()
firefox_capabilities = Selenium::WebDriver::Remote::Capabilities.firefox()
chrome = Selenium::WebDriver.for(:remote, :url => 'http://localhost:4444/wd/hub', :desired_capabilities => chrome_capabilities)
firefox = Selenium::WebDriver.for(:remote, :url => 'http://localhost:4444/wd/hub', :desired_capabilities => firefox_capabilities)
chrome.get('http://google.com')
puts chrome.title
firefox.get('http://google.com')
puts firefox.title
chrome.quit
firefox.quitPython
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
chrome = webdriver.Remote(
command_executor='http://localhost:4444/wd/hub',
desired_capabilities=DesiredCapabilities.CHROME)
firefox = webdriver.Remote(
command_executor='http://localhost:4444/wd/hub',
desired_capabilities=DesiredCapabilities.FIREFOX)
chrome.get('https://www.google.com')
print(chrome.title)
firefox.get('https://www.google.com')
print(firefox.title)
chrome.quit()
firefox.quit()JavaScript
/**
* Refer: [here](https://github.com/SeleniumHQ/selenium/blob/master/javascript/node/selenium-webdriver/example/google_search_test.js)
*/
const {Builder, By, until} = require('selenium-webdriver');
const test = require('../testing');
test.describe('Google Search', function() {
let driver;
test.before(function *() {
driver = yield new Builder().forBrowser('firefox').usingServer('http://localhost:4444/wd/hub').build();
});
test.it('works with generators', function*() {
yield driver.get('http://www.google.com/ncr');
yield driver.findElement(By.name('q')).sendKeys('webdriver');
yield driver.findElement(By.name('btnG')).click();
yield driver.wait(until.titleIs('webdriver - Google Search'), 1000);
});
test.after(() => driver.quit());
});