MyCave

Run nightwatch.js headless under jenkins

I had a problem with running headless chrome tests with nightwatch.js under jenkins. The jenkins server is serving the site to be tested with apache2. But headless chrome is ignoring /etc/hosts file. Setting --no-proxy-server is ignored IF running in headless mode.

Here are the versions of the packages:


    xvfb - 2:1.19.6-1ubuntu4.2
    google-chrome - 70.0.3538.110
    jenkins - 2.138.3
    nightwatch - v0.9.21
    Ubuntu 18.04 

Also the jenkins user is set in sudoers file:


jenkins ALL=(ALL) NOPASSWD:/usr/sbin/service apache2 *
jenkins ALL=(ALL) NOPASSWD:/usr/sbin/service php*-fpm *
jenkins ALL=(ALL) NOPASSWD:/usr/bin/google-chrome
jenkins ALL=(ALL) NOPASSWD:/bin/chmod 775 -R /var/lib/jenkins/workspace 
jenkins ALL=(ALL) NOPASSWD:/bin/chown /var/lib/jenkins/workspace

Before running the nightwach.js tests the jenkins user must start a Xvfb like:


Xvfb :10 &
export DISPLAY=:10

Or run the tests with xvfb-run


xvfb-run nightwatch

Tips for debugging:

  • Tail the custom application log if it has any. I was testing a laravel project and tailing storage/logs/laravel.log Its a good idea to truncate the file if the projects is not deleted before each jenkins build.
  • Tail ALL logs of nginx/apache to be sure you hit the server
  • Test nightwach url to open google.com and take a screenshot

browser
    .url('https://google.com')
    .saveScreenshot('./reports/homepage.png')
  • Enable source output in nightwach

browser
    .url('https://google.com')
    .source((result) => {
        // Source will be stored in result.value
        console.log(result.value);
    })