2017-06-08 2 views
1

Ich habe die folgende Funktion für die Anmeldung, die "erfolgreich" auf Erfolg und "Failed" für Dateien Konsolen trösten würde.Protractor Javascript nicht in der Reihenfolge ausgeführt

function login() { 

return new Promise(function (resolve, reject) { 
    var username = element(by.name('txtLogin')); 
    var password = element(by.id('txtPassword')); 
    var signInButton = element(by.id('btnSignIn')); 

    for (var i = 0; i < testData.length; i++) { 
     if (testData[i].env === appConfig) { 
      username.sendKeys(testData[i].user); 
      password.sendKeys(testData[i].pass); 
      signInButton.click(); 
      console.log("Successfully Clicked on the Sign In Button!"); 
      break; 
     } 
    } 
    browser.getTitle().then(function (title) { 
     if (title == "Page Title") { 
      resolve("Successfull"); 
     } else { 
      reject("Failed"); 
     } 
    }); 
}); 
}; 

und der folgende Test

describe('Login Scenarios', function() { 

beforeEach(function() { 
    login(); 
}); 

it('Valid Credentials, Should login successfully from util class', function() { 
    console.log('Successfully logged in!'); 
}); 
}); 

ich hier sehr seltsames Verhalten sehe. Diese Zeile führt aus und konsolisiert die Ausgabe, noch bevor die Seite vollständig geladen ist.

console.log("Successfully Clicked on the Sign In Button!"); 

und der untenstehende Code wird nie ausgeführt.

browser.getTitle().then(function (title) { 
     if (title == "Page Title") { 
      resolve("Successfull"); 
     } else { 
      reject("Failed"); 
     } 
    }); 

Und am Ende sehe ich den folgenden Fehler.

failed: error while waiting for protractor to sync with the page: "cannot re ad property '$$testability' of undefined" 

Ich bin mir ziemlich sicher, ich habe hier etwas versaut. Aber unfähig herauszufinden, was hier falsch ist.

Antwort

2

login gibt ein Versprechen ab, aber Sie signalisieren Jasmine/Protractor nicht, dass es darauf warten muss, dass es beendet wird. Sie können dies den done Rückruf verwenden tun:

beforeEach(function (done) { 
    login().then(function() { 
     done(); 
    }); 
}); 

Siehe Jasmine documentation (die inexplicibly in ihrem neuen Website-Layout versteckt worden zu sein scheint ...) für weitere Informationen.

Verwandte Themen