2016-06-02 13 views
1

Ich konnte nicht herausfinden, warum der Winkelmesser abgelaufen ist, wenn er den Code erreicht, wenn ignoreSynchronization auf false gesetzt ist;Winkelmesser Zeitüberschreitung nur, wenn ignoreSynchronization auf false gesetzt ist

this.countSubscribers = function() { 
 
    this.subscriberCount().then(function (count) { 
 
    totalSubscribers = count; 
 
    }); 
 
};

die Methode funktioniert korrekt und totalSubscribers Variable richtigen Wert bekommen, wenn ignoreSynchronization = true;

-Code ist eine Probe meiner spec Seite:

describe("subscriber page test", function() { 
 
    "use strict"; 
 
    var selectedCount = 10; 
 
    var subscriberCount; 
 
    
 
    describe("This test script selects no. of subscribers to be displayed on subscriber page", function() { 
 

 
     /** 
 
     * Step-1#Select number of items to be displayed 
 
     * Step-2#Get the count of subscribers displayed 
 
     * Step-3#check whether the number of subscribers displayed is equal to 10 
 
     */ 
 
     it("should select the no. of items to displayed and get the count", function() { 
 
      browser.ignoreSynchronization = false; 
 
      subscriber_page.selectItems(selectedCount); 
 
      subscriber_page.countSubscribers(); 
 
     }); 
 

 
     it("should check whether the selected no. of subscribers are displayed", function() { 
 
      expect(subscriber_page.getSubscribers()).toBe(10); 
 
     }); 
 
    }); 
 
});

und der folgende Code ist ein Beispiel meiner Seite Objekt:

var SubscriberPage = function() { 
 
    "use strict"; 
 
    this.subscriberCount = function() { return element...}; 
 
    this.selectOption = function(count) {return element...}; 
 
    var totalSubscribers; 
 
    /** 
 
    * This method selects items in list box 
 
    */ 
 
    this.selectItems = function (count) { 
 
    this.selectOption(count).click(); //selects the items from list box 
 
    }; 
 

 
    /** 
 
    * This method sets the number of subscribers listed 
 
    */ 
 
    this.countSubscribers = function() { 
 
     this.subscriberCount().count().then(function (count) { 
 
     totalSubscribers = count; 
 
    }); 
 
    }; 
 

 
    /** 
 
    * This method returns the subscriber count 
 
    */ 
 
    this.getSubscribers = function() { 
 
    return totalSubscribers;//returns the count of subscribers. 
 
    }; 
 
}; 
 
module.exports = new SubscriberPage();
Die Code Elemente erfolgreich auswählen, aber es macht lange Pause danach t hen produzieren folgende Fehlermeldung:

Fehler: Zeitüberschreitung Warten auf Winkelmesser nach 5 Sekunden mit der Seite zu synchronisieren. Bitte beachten Sie https://github.com/angular/protractor/blob/master/docs/faq.md Während für das Element mit Locator warten - Locator: Von (CSS-Selektor, ...)

Was fand ich so weit: Wenn ich aus spec Seite countSubscribers folgende Zeile auskommentieren Methode eher richtig funktioniert :

subscriber_page.selectItems(selectedCount);

oder wenn ich vorübergehend die ignoreSynchronization Variable auf true vor countSubscribers Verfahren Flip ausgeführt, WO es RKS gut.

Kann jemand erklären, was der Winkelmesser an diesem Punkt macht und was die beste Lösung ist, wenn browser.ignoreSynchronization auf false gesetzt ist?

+0

Nun bezieht sich der Synchronisationsteil auf noch zu ladende Winkelkomponenten. Und das ist eine persönliche Meinung, aber ich denke, Ihre 5-Sekunden-Timeout ist viel zu kurz. Ich würde es verlängern. – Gunderson

+0

Ich habe herausgefunden, was das Problem ist. Ich muss den Körper der countSubscribers-Funktion mit folgendem umbrechen: browser.controlFlow(). Execute (function() {....} – user6415984

Antwort

0

Behalten Sie eine Referenz von "das" vor Ihrer Funktion. Und dann ruf es an, wann immer du willst. Auch wenn Sie element.all (...) verwenden Sie können die native .count() verwenden, die das Versprechen für Sie löst.

// Verweis auf dieses

var self = this;

//element.all mit .count()

this.subscriberCount = function() { return element.all(...).Count()};

// Diese Methode gibt die Anzahl der Abonnenten

aufgelistet

this.countSubscribers = function() { return self.subscriberCount(); });

Verwandte Themen