Create a folder and install night watch
mkdir nightwatch-frontend; npm install nightwatch -g --dev-save
Select WebDriver Service
So you have an option to what browser and driver you want to use for testing, there’s Firefox(GekoDriver), Chrome(ChromeDriver), Edge(Microsoft WebDriver), Safari(SafariDriver). I always use Chrome for development, so let’s install ChromeDriver.
npm install chromedriver --save-dev
nightwatch.json
Nightwatch expects to have nightwatch.json
configuration file in your root directory and paste this code inside.
{
"src_folders" : ["tests"],
"webdriver" : {
"start_process": true,
"server_path": "node_modules/.bin/chromedriver",
"port": 9515
},
"test_settings" : {
"default" : {
"desiredCapabilities": {
"browserName": "chrome"
}
}
}
}
Settings for different environment
This is really convenient and you don’t need to change URL every environment. You can set URL for local development and different URL for testing and production.
{
...
"test_settings" : {
"default" : {
"launch_url" : "http://localhost",
"globals" : {
"myGlobalVar" : "some value",
"otherGlobal" : "some other value"
}
},
"integration" : {
"launch_url" : "http://staging.host",
"globals" : {
"myGlobalVar" : "other value"
}
}
}
}
nightwatch --env integration
Test Group
tests/
├── logingroup
| ├── login_test.js
| └── otherlogin_test.js
├── addressbook
| ├── addressbook_test.js
| └── contact_test.js
├── chat
| ├── chatwindow_test.js
| ├── chatmessage_test.js
| └── otherchat_test.js
└── smoketests
├── smoke_test.js
└── othersmoke_test.js
To run smoke tests:
nightwatch --group smoketests
To skip smoke tests:
nightwatch --skipgroup smoketests
Skipping multiple groups
nightwatch -skipgroup addessbook,chat
You can use tags as well but were not covering it here.
Lets write some basic test
Inside your tests folder create file first-test.js and paste the code sample and run nightwatch.
module.exports = {
'Demo test Google' : function (browser) {
browser.url('https://www.google.com');
browser.expect.element('#hplogo').to.be.present;
browser
.waitForElementVisible('body')
.setValue('input[type=text]', 'nightwatch')
.waitForElementVisible('input[name=btnK]')
.click('input[name=btnK]')
.pause(1000)
.assert.containsText('#main', 'Night Watch');
browser.end();
}
}
nightwatch --env default
Chrome browser will open and simulate the test.
I hope this helps you setup nightwatch basic testing. Chow!!!