Nigthmare error logging improved
This commit is contained in:
parent
1b2c383502
commit
ae178e5192
|
@ -7,6 +7,12 @@ import config from './config.js';
|
|||
let currentUser;
|
||||
|
||||
let actions = {
|
||||
test: function() {
|
||||
return this.evaluate(() => {
|
||||
document.perico();
|
||||
});
|
||||
},
|
||||
|
||||
// Generic extensions
|
||||
|
||||
clickIfExists: async function(selector) {
|
||||
|
@ -53,7 +59,7 @@ let actions = {
|
|||
|
||||
if (logoutClicked) {
|
||||
let buttonSelector = '.vn-dialog.shown button[response=ACCEPT]';
|
||||
this.wait(buttonSelector => {
|
||||
await this.wait(buttonSelector => {
|
||||
return document.querySelector(buttonSelector) != null
|
||||
|| location.hash == '#!/login';
|
||||
}, buttonSelector);
|
||||
|
@ -63,7 +69,7 @@ let actions = {
|
|||
try {
|
||||
await this.waitForURL('#!/login');
|
||||
} catch (e) {
|
||||
this.goto(`${config.url}/#!/login`);
|
||||
await this.goto(`${config.url}/#!/login`);
|
||||
}
|
||||
|
||||
await this.doLogin(userName, null)
|
||||
|
@ -133,10 +139,10 @@ let actions = {
|
|||
}, selector);
|
||||
},
|
||||
|
||||
getProperty: function(selector, property, done) {
|
||||
this.evaluate_now((selector, property) => {
|
||||
getProperty: function(selector, property) {
|
||||
return this.evaluate((selector, property) => {
|
||||
return document.querySelector(selector)[property].replace(/\s+/g, ' ').trim();
|
||||
}, done, selector, property);
|
||||
}, selector, property);
|
||||
},
|
||||
|
||||
waitPropertyLength: function(selector, property, minLength) {
|
||||
|
@ -174,17 +180,17 @@ let actions = {
|
|||
.click(selector);
|
||||
},
|
||||
|
||||
focusElement: function(selector, done) {
|
||||
this.wait(selector)
|
||||
.evaluate_now(selector => {
|
||||
focusElement: function(selector) {
|
||||
return this.wait(selector)
|
||||
.evaluate(selector => {
|
||||
let element = document.querySelector(selector);
|
||||
element.focus();
|
||||
}, done, selector);
|
||||
}, selector);
|
||||
},
|
||||
|
||||
isVisible: function(selector, done) {
|
||||
this.wait(selector)
|
||||
.evaluate_now(elementSelector => {
|
||||
isVisible: function(selector) {
|
||||
return this.wait(selector)
|
||||
.evaluate(elementSelector => {
|
||||
const selectorMatches = document.querySelectorAll(elementSelector);
|
||||
const element = selectorMatches[0];
|
||||
|
||||
|
@ -222,7 +228,7 @@ let actions = {
|
|||
element.removeEventListener('mouseover', eventHandler);
|
||||
}
|
||||
return isVisible;
|
||||
}, done, selector);
|
||||
}, selector);
|
||||
},
|
||||
|
||||
waitImgLoad: function(selector) {
|
||||
|
@ -244,10 +250,10 @@ let actions = {
|
|||
});
|
||||
},
|
||||
|
||||
countElement: function(selector, done) {
|
||||
this.evaluate_now(selector => {
|
||||
countElement: function(selector) {
|
||||
return this.evaluate(selector => {
|
||||
return document.querySelectorAll(selector).length;
|
||||
}, done, selector);
|
||||
}, selector);
|
||||
},
|
||||
|
||||
waitForNumberOfElements: function(selector, count) {
|
||||
|
@ -286,15 +292,15 @@ let actions = {
|
|||
}, selector, text);
|
||||
},
|
||||
|
||||
waitForInnerText: function(selector, done) {
|
||||
this.wait(selector)
|
||||
waitForInnerText: function(selector) {
|
||||
return this.wait(selector)
|
||||
.wait(selector => {
|
||||
const innerText = document.querySelector(selector).innerText;
|
||||
return innerText != null && innerText != '';
|
||||
}, selector)
|
||||
.evaluate_now(selector => {
|
||||
.evaluate(selector => {
|
||||
return document.querySelector(selector).innerText;
|
||||
}, done, selector);
|
||||
}, selector);
|
||||
},
|
||||
|
||||
waitForEmptyInnerText: function(selector) {
|
||||
|
@ -309,9 +315,9 @@ let actions = {
|
|||
}, hashURL);
|
||||
},
|
||||
|
||||
waitForShapes: function(selector, done) {
|
||||
this.wait(selector)
|
||||
.evaluate_now(selector => {
|
||||
waitForShapes: function(selector) {
|
||||
return this.wait(selector)
|
||||
.evaluate(selector => {
|
||||
const shapes = document.querySelectorAll(selector);
|
||||
const shapesList = [];
|
||||
|
||||
|
@ -320,20 +326,20 @@ let actions = {
|
|||
|
||||
|
||||
return shapesList;
|
||||
}, done, selector);
|
||||
}, selector);
|
||||
},
|
||||
waitForSnackbar: function() {
|
||||
return this.wait(500)
|
||||
.waitForShapes('vn-snackbar .shape .text');
|
||||
},
|
||||
|
||||
waitForLastShape: function(selector, done) {
|
||||
this.wait(selector)
|
||||
.evaluate_now(selector => {
|
||||
waitForLastShape: function(selector) {
|
||||
return this.wait(selector)
|
||||
.evaluate(selector => {
|
||||
const shape = document.querySelector(selector);
|
||||
|
||||
return shape.innerText;
|
||||
}, done, selector);
|
||||
}, selector);
|
||||
},
|
||||
|
||||
waitForLastSnackbar: function() {
|
||||
|
@ -427,20 +433,21 @@ let actions = {
|
|||
|
||||
for (let name in actions) {
|
||||
Nightmare.action(name, function(...args) {
|
||||
let fnArgs = args.slice(0, args.length - 1);
|
||||
let done = args[args.length - 1];
|
||||
let promise = actions[name].apply(this, args);
|
||||
|
||||
if (promise) {
|
||||
promise
|
||||
actions[name].apply(this, fnArgs)
|
||||
.then(res => done(null, res))
|
||||
.catch(err => {
|
||||
let errArgs = args.slice(0, args.length - 1);
|
||||
errArgs = errArgs
|
||||
.map(i => JSON.stringify(i))
|
||||
let stringArgs = fnArgs
|
||||
.map(i => typeof i == 'function' ? 'Function' : i)
|
||||
.join(', ');
|
||||
|
||||
done(new Error(`.${name}(${errArgs}) failed: ${err.message}`));
|
||||
let orgMessage = err.message.startsWith('.wait()')
|
||||
? '.wait() timed out'
|
||||
: err.message;
|
||||
|
||||
done(new Error(`.${name}(${stringArgs}) failed: ${orgMessage}`));
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
@ -6,7 +6,6 @@ describe('Login path', () => {
|
|||
it('should receive an error when the username is incorrect', async() => {
|
||||
const result = await nightmare
|
||||
.doLogin('badUser', null)
|
||||
.waitUntilNotPresent('body', 'jose')
|
||||
.waitForLastSnackbar();
|
||||
|
||||
expect(result.length).toBeGreaterThan(0);
|
||||
|
|
Loading…
Reference in New Issue