2017-09-28 1 views
0

besoin d'aide pour l'exécution des promesses. code:Comment exécuter promet immeadiatly

it('[TEST-1] Log in with invalid credentials-wrong email', function() { 
    //LogIn 
    browser.logger.info("[ENTRY] - Username: " + browser.params.Adenity.loginInfo[2].username); 
    element(by.id('js-input-email')).sendKeys(browser.params.Adenity.loginInfo[2].username); 
    expect(element(by.id('js-input-email')).getAttribute('value')).toEqual(browser.params.Adenity.loginInfo[2].username); 
    element(by.id('js-input-email')).getAttribute('value').then(function(pom) { 
     if (pom == browser.params.Adenity.loginInfo[2].username) 
      browser.logger.info("Username populated succesfully"); 
     else 
      browser.logger.info("Username not populated succesfully"); 
    }); 
    browser.logger.info("[ENTRY] - Password: " + browser.params.Adenity.loginInfo[2].password); 
    element(by.id('js-input-password')).sendKeys(browser.params.Adenity.loginInfo[2].password); 
    expect(element(by.id('js-input-password')).getAttribute('value')).toEqual(browser.params.Adenity.loginInfo[2].password); 
    element(by.id('js-input-password')).getAttribute('value').then(function(pom) { 
     if (pom == browser.params.Adenity.loginInfo[2].password) 
      browser.logger.info("Password populated succesfully"); 
     else 
      browser.logger.info("Password not populated succesfully"); 
    }); 
}); 

Résultat réel:

[INFO] protractorLog4js - [ENTRY] - Username: [email protected] 
[INFO] protractorLog4js - [ENTRY] - Password: Test1234 
[INFO] protractorLog4js - Username populated succesfully 
[INFO] protractorLog4js - Password populated succesfully 

Le résultat que je veux:

[INFO] protractorLog4js - [ENTRY] - Username: [email protected] 
[INFO] protractorLog4js - Username populated succesfully 
[INFO] protractorLog4js - [ENTRY] - Password: Test1234 
[INFO] protractorLog4js - Password populated succesfully 

Je ne sais pas comment dois-je résoudre ce problème, de sorte que toute aide est appréciée.

+0

[ '.resolve'] (https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/resolve)? –

+1

Vous ** ne pouvez pas ** rendre le code asynchrone magiquement synchrone. Voir les réponses à [cette question] (http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) qui parlent de faire une série d'actions asynchrones . Dans votre cas, vous cherchez une réponse pour les faire en série (pas en parallèle). Vous voudrez également lire comment votre framework de test gère les tests asynchrones. –

+0

Aussi incroyable que Javascript, il ne peut pas faire du voyage dans le temps: p –

Répondre

1

sendkeys retourne aussi une promesse pour ainsi assurer que les choses se passent dans l'ordre que vous attendez votre code devrait ressembler davantage:

element(by.id('js-input-email')).sendKeys(browser.params.Adenity.loginInfo[2].username).then(function() { 
    return element(by.id('js-input-email')).getAttribute('value'); 
}).then(function(pom) { 
    if (pom == browser.params.Adenity.loginInfo[2].username) 
     browser.logger.info("Username populated succesfully"); 
    else 
     browser.logger.info("Username not populated succesfully"); 

    browser.logger.info("[ENTRY] - Password: " + browser.params.Adenity.loginInfo[2].password); 
    return element(by.id('js-input-password')).sendKeys(browser.params.Adenity.loginInfo[2].password) 
}).then(function() { 
    expect(element(by.id('js-input-password')).getAttribute('value')).toEqual(browser.params.Adenity.loginInfo[2].password); 
    return element(by.id('js-input-password')).getAttribute('value') 
}).then(function(pom){ 
    if (pom == browser.params.Adenity.loginInfo[2].password) 
     browser.logger.info("Password populated succesfully"); 
    else 
     browser.logger.info("Password not populated succesfully"); 
}); 

voir - https://javascript.info/promise-chaining