NightwatchJS .waitForElementPresent Сбой прерывания не работает
-
21-12-2019 - |
Вопрос
Я использую NightwatchJS с NodeJS: http://nightwatchjs.org/api
У меня есть модальное диалоговое окно, которое может появиться, а может и не появиться.В нем есть #close_button
на это нужно нажать (если модальное значение действительно появляется), чтобы продолжить.
Я установил abortOnFailure
параметр waitForElementPresent
Для false
таким образом, скрипт продолжается, если модал не появляется.Однако я не могу заставить это сработать.
Есть какие-нибудь предложения?
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?
}
}
Решение
abortOnFailure
однако работает нормально waitForElementPresent
теперь есть ошибка, из-за которой обратный вызов, который вы передали, вызывается не в правильном контексте.Это будет исправлено.
В то же время вы можете написать свой тест следующим образом, поместив click
снаружи то же самое и выглядит чище:
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
}
}
Другие советы
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.