NightwatchJS .waitForElementPresent abortOnFailure no funciona
-
21-12-2019 - |
Pregunta
Estoy usando NightwatchJS con NodeJS: http://nightwatchjs.org/api
Tengo un cuadro de diálogo modal, que puede o no puede aparecer.Tiene un #close_button
que necesita ser hecho clic (si el modal aparece) para continuar.
Me puse el abortOnFailure
parámetro de waitForElementPresent
a false
así que el guión continúa si el modal no aparece.Sin embargo no puedo conseguir que funcione.
Alguna sugerencia?
module.exports = {
"Test" : function (browser) {
browser
.url("http://domain.com/")
.waitForElementPresent('#close_button', 5000, false, function() {
this.click('#close_button')
})
.setValue('#username', 'test@email.com')
//more code here
.end(); //does end() go here or inside .waitForElementPresent() above?
}
}
Solución
abortOnFailure
funciona bien, sin embargo waitForElementPresent
tiene un error el momento en el que la devolución de llamada que pasa es que no se llama en el contexto correcto.Que va a ser fijo.
En la media hora que usted puede escribir su prueba como ésta, con la colocación de la click
en el exterior, que es la misma cosa y se ve más limpio:
module.exports = {
"Test" : function (browser) {
browser
.url("http://domain.com/")
.waitForElementPresent('#close_button', 5000, false)
.click('#close_button')
.setValue('#username', 'test@email.com')
//more code here
.end(); // end() goes here
}
}
Otros consejos
Me he topado con algo similar, me estaba esperando un iframe para estar presente.He creado una función para cerrar esto:
pageObject función:
Home.prototype.closeIframe = function(browser) {
var self = this;
console.log('Checking for iframe');
this.browser
.isVisible(iframeSelectors.iframe, function(result) {
if (result.value === true) {
self.browser
.log('iframe visible')
.frame(iframeSelectors.name)
.waitForElementVisible(iframeSelectors.closeLink)
.click(iframeSelectors.closeLink)
.assert.elementNotPresent(iframeSelectors.iframe)
.frame(null)
.pause(2000); //allow for proper frame switching
} else {
console.log('iframe is not visible');
}
});
return this;
En mi prueba me espere a que la página de cargar completamente antes de ejecutar la función anterior.