Dockerfile for Protractor test execution
Based on [mrsheepuk/protractor], this image contains a fully configured environment for running Protractor tests under Chromium and Firefox browsers.
This version additionally supports linking docker containers together to test software in another container, and passing a custom base URL into your protractor specs so you don't have to hard-code the URL in them.
- Xvfb The headless X server, for running browsers inside Docker
- npm Node.js package manager used to install Protractor and any specific node.js modules the tests may need
- Selenium webdriver Browser instrumentation agent used by Protractor to execute the tests
- Java 8 SE Needed by Selenium
- Chromium The OSS core part of Google Chrome browser
- Firefox Firefox browser
- Protractor An end-to-end test framework for web applications
- Supervisor Process controll system used to manage Xvfb and Selenium background processes needed by Protractor
- x11vnc x11vnc allows one to view remotely and interact with real X displays (i.e. a display corresponding to a physical monitor, keyboard, and mouse) with any VNC viewer.
In order to run tests from a CI system, execute the following:
docker run --rm -v <test project location>:/project grm78/protractor
The container will terminate automatically after the tests are completed. The output of supervisord visible on the console is not interesting in most circumstances. You should check
target/supervsor.out file to see the output of Protractor. Dispalying the file in an Unix terminal using
cat is recommended over opening it using an editor because the file contains ANSI escape sequences.
To run against another container, execute as follows (this example assumes that the image you are testing exposes its web site on port 3000):
docker run -d --name=webe2e <image to test> docker run --rm --link=webe2e:webe2e -v <test project location>:/project --env BASEURL=http://webe2e:3000/ grm78/protractor docker rm -f webe2e
You can also use the BASEURL variable without container linking, to test any arbitrary web site. If you wish to use the BASEURL functionality, you must use relative URLs within your test specs (e.g.
browser.get("/profile/") instead of
If you want to run the tests interactively you can launch the container and enter into it:
CONTAINER=$(docker run -d --link=webe2e:webe2e -v <test project location>:/project --env MANUAL=yes grm78/protractor) docker exec -ti $CONTAINER bash su - node protractor --baseUrl http://webe2e:8080/
You can follow tests using VNC by using :
vncviewer 127.0.0.1 (password is 1234)
When inside the container you can run the tests at the console by simply invoking
protractor. When things don't work as expected, you should check Selenium WebDrover output in
/var/log/supervisor/webdriver-err.log. When you are done, you terminate the Protractor container with
docker kill $CONTAINER