How can I run Nightwatch tests in a specific order? How can I run Nightwatch tests in a specific order? selenium selenium

How can I run Nightwatch tests in a specific order?


Nightwatch will run each test within a particular file in order, so one (naive) solution would be to put every test in the same file, in the order you want them to run.

This will get unwieldy if you have too many tests for a single file. To get around this, you can take advantage of Nightwatch running each test file in alphabetical order. One way to do this would be to prefix each test file with a number indicating the order you want them to be run in. For example, if you had two test files, before.js and after.js, and you wanted before.js to run first, you could just change the names of the files to 01before.js and 02after.js. This will make Nightwatch read the files in the order you want.


This isn't a great answer but it works: numerically sequence your test files.

0001_first_test_I_want_to_run.js0002_second_test_I_want_to_run.js...9999_last_test_I-want_to_run.js


To control the order (and also to use a common module for authentication) I used a "main" test module and imported the tests in the order I wanted:

Inside main.test.js

// import test modulesconst first = require('./first.test.js');const second = require('./second.test.js');module.exports = {    before(){         // login, etc.    },    'first': (browser) => {         first.run(browser);    },    'second': (browser) => {         second.run(browser);    },}

and in first.test.js

var tests = {    'google': (browser) => {        browser.url('https://google.com';    },    'cnn': (browser) => {        browser.url('https://cnn.com';    }};module.exports = {    // allow nightwatch to run test module only inside _main    '@disabled': true,    'run': (browser) => {        // call all functions inside tests        Object.values(tests)            .filter(f => typeof f === 'function')            .forEach(f => f(browser));    }};