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?
    }
}
War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top