Getting Started with Hub and Nodes

Diego Molina edited this page Aug 24, 2018 · 6 revisions

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.quit

Python

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());
});
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.