NightwatchJS .waitForElementPresent abortOnFailure ne fonctionne pas
-
21-12-2019 - |
Question
Je suis en utilisant NightwatchJS avec NodeJS: http://nightwatchjs.org/api
J'ai une boîte de dialogue modale, qui peut ou peut ne pas apparaître.Il a un #close_button
qui doit être cliqué (si l'modale apparaît) pour continuer.
J'ai mis le abortOnFailure
paramètre de waitForElementPresent
pour false
ainsi, le script continue si l'modal n'apparaît pas.Cependant, je peux pas le faire fonctionner.
Toutes les suggestions?
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?
}
}
La solution
abortOnFailure
fonctionne très bien, cependant waitForElementPresent
a un bug maintenant, dans lequel la fonction de rappel, vous avez passé, il ne s'appelle pas dans le bon contexte.Qui sera fixé.
En attendant vous pouvez écrire votre essai de ce genre, avec la mise en place de la click
à l'extérieur, qui est la même chose et semble plus propre:
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
}
}
Autres conseils
Je suis tombé sur quelque chose de similaire, j'ai été en attente pour un iframe à être présent.J'ai créé une fonction pour fermer effectivement c':
pageObject fonction:
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;
Dans mon test, j'attends la page pour charger complètement avant l'exécution de la fonction ci-dessus.