nightwatch-data-driven
Provides tool for emulating data driven tests in Nightwatch.js.
Forked from https://github.com/wsbaser/nightwatch-data-driven
Installation
npm i nightwatch-data-driven --save
Example 1: Simple usage
- Create DataDrivenTest instance passing a browser object, provided by Nightwatch and function representing the body of the test (the ArrangeActAssert function).
- Call forCases method with object containing names and data for test cases. Use disabled parameter to deactivate test case(see example).
import DataDrivenTest from 'nightwatch-data-driven';
import {authConfig} from '../configs/auth';
var test = {
before: function (browser) {
browser.init();
},
'Valid credentials => successfull login': function (browser) {
new DataDrivenTest(browser, function(data, name){
browser.logout();
browser.page.login().loginAndWaitForRedirect(data.email, data.pass);
browser.page.workspace().assertIsCurrentPage(name);
})
.forCases({
"Valid credentials": {email: authConfig.main.EMAIL, pass: authConfig.main.PASS},
"Ignore leading space in email": {email: ' ' + authConfig.main.EMAIL, pass: authConfig.main.PASS},
"Email in upper case": {
email: authConfig.main.EMAIL.toUpperCase(),
pass: authConfig.main.PASS,
disabled: true
}
});
},
after: function (browser) {
browser.end();
}
};
export = test;
Example 2: Building and reusing of "test blanks"
- Create DataDrivenTest instance without parameters for our "test blank".
- Call withArrange method passing Arrange function of "test blank".
- Call withAct method passing Act function of "test blank".
- Call withBrowser method(in before hook for example), passing Nightwatch browser object.
- Now you can reuse "test blank" calling withAssert and forCases methods with different Assert functions and data in each particular test.
import DataDrivenTest from 'nightwatch-data-driven';
import {mother} from '../mother';
let submitLoginForm = new DataDrivenTest()
.withArrange(function(cb) {
this.browser.logout(cb)
})
.withAct(function(dt) {
this.browser.page.login().section.loginForm.fillAndSubmit(dt.email, dt.pass)
});
var test = {
before: function (browser) {
browser.init();
submitLoginForm.withBrowser(browser);
},
'Login is invalid email: show error': function (browser) {
submitLoginForm
.withAssert((dt, nm) => browser.page.login().assertNoProgress(nm))
.forCases({
"1. ": {email: "a", pass: mother.Valid.PASS},
"2. ": {email: "@b", pass: mother.Valid.PASS},
"3. ": {email: "@b.", pass: mother.Valid.PASS},
"4. ": {email: "@b.c", pass: mother.Valid.PASS},
"5. ": {email: "a@b", pass: mother.Valid.PASS},
"6. ": {email: "a@b.", pass: mother.Valid.PASS},
"7. ": {email: "a@b.c", pass: mother.Valid.PASS},
"8. ": {email: "й@ц.ук", pass: mother.Valid.PASS},
});
},
'Login is valid email: show progress': function (browser) {
submitLoginForm
.withAssert((dt, nm) => browser.page.login().assertProgressDisplayed(nm))
.forCases({
"1. ": {email: "a@b.cd"},
"2. ": {email: "1#$%&'*+/=?^-_`{|}~.a@b.cd"},
"3. ": {email: "a@1-b.cd"},
"4. ": {email: "a@b.12"}
});
},
after: function (browser) {
browser.end();
}
}
export = test;