2017-12-28 43 views
1

Immer wenn ich versuche, ein automatisiertes Testskript auszuführen, das mit JavaScript mit Protractor geschrieben wurde, kann ich sehen, dass diese beiden tatsächlich parallel unabhängig voneinander ausgeführt werden. Beispiel:Nicht sequenzielle Ausführung von JavaScript mit Winkelmesser-Tests

it("Validation of ND account", function() { 

    // I logged in, and navigated to the page I need 
    // And this is where is gets intresting 

    console.log("\n"); 
    console.log("Before getting number of users"); 
    var numberOfUsers = element(by.xpath('//div[@viewid="userList"]//div[@class="results-count ng-binding"]')).getText().then(function(text) { 
     console.log(text); 
    }); 
    console.log("After getting number of users"); 

// for (i=1, i<numberOfUsers, i++) { 
//  console.log(i); 
// } 

    }); 

Ich gehe davon aus, dass ich meine Protokolle in der gleichen Reihenfolge erhalten - vor, Nummer und nach, aber zuerst ich JS bekommen, und Protractor dann (weil es länger dauert zu laden). Dies ist ein Ergebnis dieses Skript in Konsolenausgabe ausgeführt wird:

Started 
[32m.[0m 

Before getting number of users 
After getting number of users 
161 
[32m.[0m 

2 specs, 0 failures 

das gesagt ist, mein Problem ist, dass wenn ich eine Seite geöffnet werden soll, ein Element Text und dann einige Operationen mit ihm durchführen (Ausführen eines FOR Schleife, die auskommentiert ist), wird dies nicht zulassen, da es ein ungelöstes Versprechen zurückgibt, bevor es die Seite sogar lädt. Genauer gesagt, was es tut, beginnt eine Seite zu öffnen, gleich bevor die Seite geladen wird, wird es die Schleife ausführen, die von Element von der Seite abhängt. Die Schleife schlägt fehl, weil das Element noch nicht angezeigt wurde und das Programm immer noch nicht über das Textattribut verfügt. Also hier ist die Frage: ist es möglich, streng an die Skript-Sequenz zu halten (JS keine Skripte nach Winkelmesser Befehle geschrieben, bevor die Ausführung von Winkelmesser Befehle abgeschlossen sind) ohne JS Timeouts oder Wartefunktionen?

Antwort

0

Sie müssen Promises verstehen und mit den Callbacks arbeiten, damit es der Reihe nach funktioniert.

Für diesen speziellen Fall, Sie numberOfUsers für Ihren Test nicht warten kann, gehen zu halten, werden Sie in der Callback-Funktion, um fortzufahren haben:

console.log("\n"); 
console.log("Before getting number of users"); 
element(by.xpath('//div[@viewid="userList"]//div[@class="results-count ng-binding"]')).getText().then(function(text) { 
    console.log(text); 
    // continue working here with "text" 
    console.log("After getting number of users"); 
}); 
+0

noch nicht vollenden, was ich tue. Jetzt stelle ich diese https://stackoverflow.com/questions/48016927/protractor-script-doesnt-work-properly wahrscheinlich aus dem gleichen Grund –

Verwandte Themen