wake-up-neo.net

Winkelmesser - Verwendung von browser.waitForAngular ()

Ich habe einige Tests mit Winkelmesser für die Anwendung angle.js geschrieben. Ich verwende Page Objects Design Pattern und habe einige Methoden, die durch Klicken auf Links und Schaltflächen zu anderen Seiten navigieren. und bald danach rufe ich browser.waitForAngular().

Seitenobjekt

module.exports = function () {
    this.companyNameLink = element(by.id('viewCompany'));
    this.newMeetingButton = element(by.id('newMeetingButton'));

    this.createNewGeneralMeeting = function () {
        this.newMeetingButton.click();
        browser.waitForAngular();
    };

    this.goToCompanyPage = function () {
        this.companyNameLink.click();
        browser.waitForAngular();
    };
};

Und in einer bestimmten Datei verwende ich dieses Seitenobjekt wie dieses ..

var DashboardPage = require('../dashboardPageObject.js');
dashboardPage = new DashboardPage();

...

dashboardPage.goToCompanyPage();

Aber das Problem ist manchmal, dass ich den angular could not be found on the window-Fehler bekomme und meine Tests fehlschlagen. Meist laufen die Tests. Dieses Problem ist zufällig. Meine Frage ist, dass ich die browser.waitForAngular() von der Seitenobjektmethode entfernen und sie aufrufen sollte, nachdem ich den Methodenaufruf so gemacht habe ...

Geändertes Seitenobjekt

...
this.goToCompanyPage = function () {
    this.companyNameLink.click();
};
...

Spezifikationsdatei

dashboardPage.goToCompanyPage();
browser.waitForAngular();

Verursacht der Aufruf von browser.waitForAngular() das Problem? Wo soll ich waitForAngular nennen? Gibt es bewährte Methoden, wie man dies verwendet?

17
Kasun Kodagoda

Vom Winkelmesser Dokumentation :

Weisen Sie den Web-Treiber an, zu warten, bis Angular das Rendern beendet hat und keine ausstehenden $ http- oder $ Timeout-Aufrufe mehr vorhanden sind, bevor Sie fortfahren. Beachten Sie, dass Protractor diesen Befehl automatisch vor jeder WebDriver-Aktion anwendet.

Sie sollten dies überhaupt nicht nennen, und ich kann mir keinen gültigen Fall vorstellen, in dem Sie sollten.

27
Delian Mitankin

Anstatt waitForAngular zu verwenden, sollten Sie das von click zurückgegebene Versprechen behandeln.

Daher sollten Ihre Seitenobjektmethoden zunächst diese Versprechen zurückgeben:

this.goToCompanyPage = function () {
    return this.companyNameLink.click();
};

Ihre tatsächliche Verwendung dieser Methode kann dann folgendermaßen aussehen:

dashboardPage.goToCompanyPage().then(function() {
  // this will be executed when the click is done.
  // No need for any waitForAngular.
});

Weitere Beispiele finden Sie in meiner state/page-object-Version der Angular PhoneCat Protractor-Testsuite.

8
avandeursen

Ich verwende browser.WaitForAngular (), bevor ich über browser.Url .__ zu einer bestimmten Seite navigiere. Andernfalls erhalte ich Fehler im Browserprotokoll, für das ich in der Testbereinigung aktiv bin.

0