The project is made possible by volunteer contributors who have put in thousands of hours of their own time, and made the source code freely available under the Apache 2.0 license.

Images included:
- elgalu/selenium-base: Base image which includes Java runtime and Selenium jar
- elgalu/selenium-hub: Image for running a Selenium Grid Hub
- elgalu/selenium-node-base: Base image for Selenium Nodes which includes a virtual desktop environment and VNC support
- elgalu/selenium-node-chrome: Selenium node with Chrome installed, needs to be connected to a Selenium Hub
- elgalu/selenium-node-firefox: Selenium node with Firefox installed, needs to be connected to a Selenium Hub
- elgalu/selenium-full: Self contained Selenium Hub and Node combined configuration with both Chrome and Firefox
$ docker run -d -p 4444:4444 -p 5900:5900 --name selenium-hub elgalu/selenium-hub:2.44.0
$ docker run -d --link selenium-hub:hub elgalu/selenium-node-chrome:2.44.0
$ docker run -d --link selenium-hub:hub elgalu/selenium-node-firefox:2.44.0
$ docker run -d -p 4444:4444 -p 5900:5900 elgalu/selenium-full:2.44.0
Ensure you have the phusion/baseimage:0.9.15
base image downloaded, this step is optional since docker takes care of downloading the parent base image automatically.
$ docker pull phusion/baseimage:0.9.15
Clone the repo and from the project directory root you can build everything by running:
$ VERSION=local make build
Note: omitting VERSION=local
will build the images with the current version number thus overwriting the images downloaded from dockerhub.
$ docker run -d --name selenium-hub -p=127.0.0.1::4444 elgalu/selenium-hub:2.44.0
$ CH=$(docker run --rm --name=ch -p=127.0.0.1::5900 \
--link selenium-hub:hub -v /e2e/uploads:/e2e/uploads \
elgalu/selenium-node-chrome:2.44.0)
-- or --
$ CH=$(docker run --rm --name=ch -p=127.0.0.1::4444 -p=127.0.0.1::5900 \
-v /e2e/uploads:/e2e/uploads elgalu/selenium-full:2.44.0)
Note -v /e2e/uploads:/e2e/uploads
is optional in case you are testing browser uploads on your webapp you'll probably need to share a directory for this.
The 127.0.0.1::
part is to avoid binding to all network interfaces, most of the time you don't need to expose the docker container like that so just localhost for now.
I like to remove the containers after each e2e test with --rm
since this docker container is not meant to preserve state, spawning a new one is less than 3 seconds. You need to think of your docker container as processes, not as running virtual machines if case you are familiar with vagrant.
A dynamic port will be binded to the container ones, i.e.
# Obtain the selenium port you'll connect to:
docker port selenium-hub 4444
# -- or --
docker port $CH 4444
#=> 127.0.0.1:49155
# Obtain the VNC server port in case you want to look around
docker port $CH 5900
#=> 127.0.0.1:49160
This command line is the same as for Chrome, remember that the selenium running container is able to launch either Chrome or Firefox, the idea around having 2 separate containers, one for each browser is for convenience plus avoid certain :focus
issues you web app may encounter during e2e automation.
$ docker run -d --name selenium-hub -p=127.0.0.1::4444 elgalu/selenium-hub:2.44.0
$ FF=$(docker run --rm --name=ch -p=127.0.0.1::5900 \
--link selenium-hub:hub -v /e2e/uploads:/e2e/uploads \
elgalu/selenium-node-firefox:2.44.0)
-- or --
$ FF=$(docker run --rm --name=ch -p=127.0.0.1::4444 -p=127.0.0.1::5900 \
-v /e2e/uploads:/e2e/uploads elgalu/selenium-full:2.44.0)
In case you have RealVNC binary vnc
in your path, you can always take a look, view only to avoid messing around your tests with an unintended mouse click or keyboard.
$ ./bin/vncview 127.0.0.1:49160
If you are running Boot2Docker on Mac then you already have a VNC client built-in. You can connect by entering vnc://<boot2docker-ip>:49160
in Safari or Alfred
When you are prompted for the password it is secret. If you wish to change this then you should either change it in the /NodeBase/Dockerfile
and build the images yourself, or you can define a docker image that derives from the posted ones which reconfigures it:
FROM elgalu/selenium-node-base:2.44.0
#FROM elgalu/selenium-node-chrome:2.44.0
#FROM elgalu/selenium-node-firefox:2.44.0
#FROM elgalu/selenium-full:2.44.0
# Choose the FROM statement that works for you.
RUN x11vnc -storepasswd <your-password-here> /home/seluser/.vnc/passwd
$ docker images
#=>
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
elgalu/selenium-full 2.44.0 68e369e3141e 30 minutes ago 886.3 MB
elgalu/selenium-node-firefox 2.44.0 c7c0c99afabd 31 minutes ago 695.9 MB
elgalu/selenium-node-chrome 2.44.0 c4cd17423321 31 minutes ago 796.7 MB
elgalu/selenium-node-base 2.44.0 4f7c1788fe4c 32 minutes ago 584.8 MB
elgalu/selenium-hub 2.44.0 427462f54676 35 minutes ago 431.4 MB
elgalu/selenium-base 2.44.0 9126579ae96e 35 minutes ago 431.4 MB
phusion/baseimage 0.9.15 cf39b476aeec 4 weeks ago 289.4 MB
All output is sent to stdout so it can be inspected by running:
$ docker logs -f <container-id|container-name>
The containers leave a few log files in addition to stdout output to see what happened:
/tmp/Xvfb_headless.log
/tmp/fluxbox_manager.log
/tmp/x11vnc_forever.log
/tmp/sel-hub.log
/tmp/sel-node.log