A small shell script that helps run nightwatch tests using Selenium running in a docker container.
Create a copy of this repo (don't fork it)
yarn install
to install all required dependenciesAdd your Nightwatch tests in the
e2e/tests
folder, removing the existingcrunchDemo.js
Configure your environments in
env/
. Start by updatingenv/stable
and setting it to your valid URLUpdate
nightwatch.conf.js
as neededRun
nightwatchrun.sh
./nightwatchrun.sh -c nightwatch.conf.js
You should see output that looks like this:
Starting selenium testing against environment: stable with version latest Using config file: nightwatch.conf.js 505dfa97156f1be91f881f23b1cdcf8acd5db80b2e349a5f4d952ab5545daba6 Today's test are run against: Google Chrome 60.0.3112.113 unknown Selenium is running at 0.0.0.0 port 32783 Selenium is not yet alive. Sleeping 1 second. yarn run v1.1.0 warning From Yarn 1.0 onwards, scripts don't require "--" for options to be forwarded. In a future version, any explicit "--" will be forwarded as-is to the scripts. $ "/Users/xistence/Projects/Crunch/nightwatchrun/node_modules/.bin/nightwatch" "-c" "nightwatch.conf.js" Running in parallel with auto workers. Started child process for: crunchDemo crunchDemo Running in parallel with auto workers. crunchDemo \n crunchDemo [Crunch Demo] Test Suite ============================ crunchDemo crunchDemo Results for: Demo test Google crunchDemo ✔ Element <body> was visible after 71 milliseconds. crunchDemo ✔ Testing if the page title equals "Crunch". crunchDemo ✔ Testing if element <div.intro-message h3> contains text: "A modern platform". crunchDemo ✔ Testing if element <div.intro-message h3 + h3> contains text: "for analytics". crunchDemo OK. 4 assertions passed. (4.065s) >> crunchDemo finished. ✨ Done in 4.58s. Executed tests 1 times successfully Removing the docker container: nightwatchrun.nightwatch.conf.js
nightwatchrun supports a variety of flags that alter its operation:
-c
[REQUIRED] -- The nightwatch configuration file to use, this is required.-e
[DEFAULT: stable] -- The environment file to load, has to be available inenv/
-w
[DEFAULT: auto] -- The amount of workers that Nightwatch is allowed to start at once. The default sets it automatically based upon the amount of available cores on the host system. Lowering this may be necessary if tests seem to be failing randomly.-v
[DEFAULT: latest] -- The Selenium container version tag to use, defaults tolatests
.-i
[DEFAULT: None] -- This is the local public IP of the host Docker is running on, this is used with thelocal
environment, see Local Environment for more information.-d
[DEFALT: False] -- This will start the debug version of the Selenium container, which starts a VNC server so that you may watch progress of nightwatch testing in real time. Will ask user to press enter before continuing a test run to give the user time to VNC to the newly running instance.-x
[DEFAULT: 1] -- The amount of times to run the tests, this can be handy when dealing with a flaky test that may or may not fail. The entire test suite (unless alternate flags are passed to nightwatch) will be retried the selected number of times.
Passing flags to the underlying nightwatch
is possible by ending flag input
to nightwatchrun.sh
with a --
, anything after the --
will be passed
through to nightwatch
. This can be used for instance to only run a singular
test:
./nightwatchrun.sh -c nightwatch.conf.js -e stable -- -t e2e/tests/crunchDemo.js
Which will run that single test, instead of all tests.
Due to the Docker container not having access to localhost
on the host that
it runs on, you will need to use a FQDN when testing against a locally running
server. This server should also be listening on a non-localhost IP (anything
but 127.0.0.1).
In the example provided we use local.crunch.io
, when the Docker container
starts we add a /etc/hosts
entry for local.crunch.io
that points to one
of the hosts public IP addresses. If you are using something like
grunt-contrib-connect to host a local server, you need to set the hostname
parameter to *
or 0.0.0.0
.
A prehook
will attempt to determine the public IP address of the host
machine when starting with a local
environment, however if it is wrong you
may override the IP address with the -i
flag to nightwatchrun.sh
.
This way the Docker container will connect to the host's public IP address and will be able to reach the locally running instance.
./nightwatchrun.sh -e local -c nightwatch.conf.js
Will run against the local environment.