NightwatchJS .waitForElementPresent abortOnFailure não funciona
-
21-12-2019 - |
Pergunta
Estou usando NightwatchJS com NodeJS: http://nightwatchjs.org/api
Eu tenho uma caixa de diálogo modal, que pode ou não aparecer.Tem um #close_button
que precisa ser clicado (se o modal aparecer) para continuar.
Eu configurei o abortOnFailure
parâmetro de waitForElementPresent
para false
então o script continua se o modal não aparecer.No entanto, não consigo fazê-lo funcionar.
Alguma sugestão?
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?
}
}
Solução
abortOnFailure
funciona bem, no entanto waitForElementPresent
agora tem um bug no qual o retorno de chamada que você passou não é chamado no contexto correto.Isso será consertado.
Enquanto isso, você pode escrever seu teste assim, colocando o click
lá fora, que é a mesma coisa e parece mais limpo:
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
}
}
Outras dicas
Encontrei algo semelhante, estava esperando a presença de um iframe.Criei uma função para realmente fechá-lo:
Função pageObject:
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;
No meu teste, espero a página carregar totalmente antes de executar a função acima.