2016-03-30 8 views
2

Wenn ich versuchte, folgenden Code innerhalb des Testkörpers zu verwenden, scheint es gut zu funktionieren, außer dass Code nach (außerhalb) dieses Blocks immer noch ausgeführt wird und der Test am Ende fehlschlägt.Wie kann die EXPECT-Bedingung darauf warten, dass das Versprechen aufgelöst wird (Code in einer Methode eingeschlossen)?

var el = element(by.model('name.first')); 
    el.isDisplayed().then(function(condition) { 
     console.log("Is Element Displayed : " + condition); 
     if(!condition) { 
      fail('Test Failed'); 
     } 
    }); 

Aber wenn ich diesen Code innerhalb einer Methode wickle (in einer anderen util-Datei) wie:

isMyElementDisplayed: function (element) { 
    var el = element; 
    el.isDisplayed().then(function(condition) { 
     console.log("Is Element Displayed : " + condition); 
     return condition; 
    }); 
} 

und dann versuchen, diese Methode in meinem Test zu nennen wie:

expect(elementActions.isMyElementDisplayed(element(by.model('name.first')))).toBe(true); 

schlägt mit folgender Ausnahme fehl. Is Element Displayed : false

und noch, wie auch in diesem Fall wird der Test nicht am ‚erwarten‘ Zustand zu stoppen, aber nicht an:

Expected undefined to be true.

aber ich die Meldung in den Protokollen gedruckt zu werden das Ende. Sie können sagen, dass ich Winkelmesser und Javascript neu bin. Ich versuche, QA-Funktionstests zu automatisieren und einige wiederverwendbare Methoden zu erstellen, die wiederum von anderen verwendet werden können.

  1. Gibt es eine korrekte Möglichkeit, den Code innerhalb einer util-Methode zu verpacken, wie ich es tue? und

  2. Wie man expect Zustand zu warten, bis das Versprechen gelöst ist?

FYI: npm -Ausführung -> 2.14.7 und Winkelmesser --Version -> 3.0.0

+2

Sie müssen die Versprechen aus dem 'isMyElementDisplayed' ersten –

+0

@ArtyomNeustroev zurückkehren können Sie bitte führen, wie das zu tun in diesem Fall. Das wäre sehr hilfreich. Sie können das auch als Antwort posten, ich werde akzeptieren, wenn das mein Problem gelöst hat. – AGill

+0

Ich war mir nicht sicher, dass dies das einzige Problem ist, also konnte ich es nicht als Antwort posten, aber es gibt jetzt einen :) –

Antwort

1

Was @Artyom wies darauf hin, war return in die isMyElementDisplayed Funktion zu setzen:

isMyElementDisplayed: function (element) { 
    var el = element; 

    // v HERE 
    return el.isDisplayed().then(function(condition) { 
     console.log("Is Element Displayed : " + condition); 
     return condition; 
    }); 
} 

Auf diese Weise würde die isMyElementDisplayed Funktion eine Zusage zurückgeben, die auf den Kontrollfluss gesetzt würde, und expect würde es implizit auflösen, bevor eine Assertion erfolgt.


Obwohl, würde ich ein warten, um das Problem zu umgehen:

var EC = protractor.ExpectedConditions; 

var elm = element(by.model('name.first')); 
browser.wait(EC.visibilityOf(elm), 5000, "Element is still not visible"); 

expect(elm.isDisplayed()).toBe(true); 
+0

Thanx @ Alecxe. . – AGill

Verwandte Themen