Вопрос

Я использую 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top