2017-02-06 2 views
0

ZusammenfassungWarten auf Toast in Protractor verschwinden zu

Wie kann ich für alle Toasts warten verschwinden, wenn Protractor zum Testen eines AngularJS Webapp mit?

Mehr Details

Ich habe eine AngularJS app, dass ich Protractor bin mit zu testen. Ich benutze angular-toastr, um Benachrichtigungen anzuzeigen, wenn Dinge in der Anwendung passieren.

An einem Punkt in den Tests kann ich nicht auf eine Schaltfläche klicken, weil ein Toast die Schaltfläche derzeit blockiert. Der Fehler, den ich bekommen ist:

Element is not clickable at point (898, 712). Other element would receive the click: <div id="toast-container" {...}

Also habe ich für den Toast warten soll verschwinden, bevor Sie fortfahren. Da angular-toastr nicht $timeout verwendet, kann ich das nicht mit browser.waitForAngular();

So wie soll ich es tun?

Was versuche ich NICHT?

Ich versuche nicht, den Inhalt des Toasts zu testen. Im Moment ist mir der Toast egal, ich möchte nur auf den Knopf klicken, den der Toast verdunkelt.

+0

ich würde verwenden, ExpectedConditions: invisibilityOf/stalenessOf zu überprüfen, ob der Toast nicht mehr existiert in DOM. – Barney

Antwort

0

können Sie warten, bis das Element nicht vorhanden ist (oder alternativ nicht angezeigt):

browser.wait(function() { 
    return $('#toast-container').isPresent().then(function (toastPresent) { 
     return !toastPresent; 
    }); 
}, 10000); 
0

ich einen Ausgangspunkt in diesem Blog-Eintrag gefunden: http://docsplendid.com/archives/209

ich es ein bisschen gezwickt, mit zu arbeiten toastr, und das ist, wo es endete:

var hasClicked = false; 

browser.wait(function() { 
    var deferred = protractor.promise.defer(); 

    var elements = element.all(by.className('toast')); 
    var count = elements.count().then(function (result) { 
     // If there are toasts active, click them to hide them faster. 
     if (result > 0 && !hasClicked) { 
      elements.click(); 
      hasClicked = true; 
     } 
     deferred.fulfill(result === 0); 
    }); 

    return deferred.promise; 
});