NightwatchJS .waitForElementPresent abortOnFailure funktioniert nicht
-
21-12-2019 - |
Frage
Ich verwende NightwatchJS mit NodeJS: http://nightwatchjs.org/api
Ich habe einen modalen Dialog, der möglicherweise angezeigt wird oder nicht.Es hat ein #close_button
Darauf muss geklickt werden (falls das Modal angezeigt wird), um fortzufahren.
Ich habe das eingestellt abortOnFailure
Parameter von waitForElementPresent
Zu false
Das Skript wird also fortgesetzt, wenn das Modal nicht angezeigt wird.Allerdings bekomme ich es nicht zum Laufen.
Irgendwelche Vorschläge?
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?
}
}
Lösung
abortOnFailure
funktioniert aber gut waitForElementPresent
Es gibt jetzt einen Fehler, bei dem der von Ihnen übergebene Rückruf nicht im richtigen Kontext aufgerufen wird.Das wird behoben.
In der Zwischenzeit können Sie Ihren Test so schreiben, mit Platzierung der click
außen, das ist das Gleiche und sieht sauberer aus:
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
}
}
Andere Tipps
I ran into something similar, I was waiting for an iframe to be present. I created a function to actually close it:
pageObject function:
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;
In my test I wait for the page to fully load before executing the above function.