2016-08-09 2 views
0

Ich weiß, dass diese ähnliche Frage da draußen ist, aber ich konnte nicht wirklich viel von den Antworten nehmen, die von ihnen gefunden werden. Ich versuche nicht, hier faul zu sein und forsche nicht zuerst, weil ich es getan habe!Rückgabewert und/oder Ausbruch eines Versprechens in Javascript

Ich benutze Winkelmesser/Jasmin in JavaScript.

ich eine Methode in einer Seite Objektdatei gespeichert haben:

this.verifyUserExists = function (username){ 
    driver.findElements(by.css('.ui-datatable-data > tr > td:nth-of-type(1)')).then(function (elements) { 
     for (i = 0; i < elements.length; i++) { 
      (function (index) { 
       elements[index].getText().then(function (users) { 
        if (users.trim().toLowerCase() == username.trim().toLowerCase()) { 
         console.log('Username: ' + users.trim() + ' found in the list.'); 
         expect(true).toBeTruthy(); 
        } 
       }).catch(function (err) { }); 
      })(i); 
     } 
    }).catch(function (err) { }); 
} 

Und in meinem Haupt-Test würde ich obj.VerifyUserExists('anon123'); tun

Wie ersichtlich ist, nimmt die Methode einen String Benutzernamen und sucht sie über eine Liste von Benutzernamen in einer Tabelle. Der Code funktioniert, wenn der Benutzer existiert und der Test bestanden wird. Wenn der Benutzer jedoch nicht vorhanden ist und nicht das letzte Element in der Liste ist, schlägt er fälschlicherweise fehl.

Zum Beispiel:

if (users.trim().toLowerCase() == username.trim().toLowerCase()) { 
    console.log('Username: ' + users.trim() + ' found in the list.'); 
    expect(true).toBeTruthy(); 
} 
else { 
    //expect to fail 
} 

Mit dem oben - wenn wir 5 Benutzernamen haben, von denen 4 fälschlicherweise scheitern.

Ich habe versucht, eine boolesche Flagge hinzuzufügen, aber es kommt überall undefined zurück. Also meine Frage ist, wie würde ich etwas tun, wie folgt aus:.

if(user == username){ 
    //true 
    //exit 
} 
else if (end of list && name not found) 
{ 
    //false 
    //exit 
} 

Antwort

1

Statt Schleife durch alle Elemente, die Sie direkt den Text aller Elemente erhalten und verwenden können erwarten() toContain() Matcher überprüfen, ob die Der erforderliche Wert ist im Locator vorhanden. Schau dir das untenstehende Beispiel an.

var displayedUserNames = element.all(by.css('.ui-datatable-data > tr > td:nth-of-type(1)')).getText(); 
//above line will get you all available username as Array. 
expect(displayedUserNames).toContain(actualUserNametobeDisplayed) 
+0

Ich habe versucht, etwas ähnliches, aber ich bekomme die folgende Fehlermeldung, wenn ich es auf diese Weise tun. ‚Driver.findElements (...) getText ist keine Funktion‘ –

+0

Verwendung element.all() getText() –

+0

Yup versuchte das, nachdem ich den ersten Kommentar gesendet hatte. Es hat funktioniert .. so ein Gesicht Palm-Moment -_- Danke! –

Verwandte Themen