2017-08-24 13 views
0

Je veux une fonction retourne la valeur qui sera utilisée pour assertaionComment puis-je récupérer une valeur du journal de la console et l'affirmer dans mon test Protractor?

S'il vous plaît considérer la fonction suivante:

function giveWrittenValue(x) { 
     var msg; 
     x.getAttribute('value').then(function (value) { 
      if (value) { 
       console.log(value); 
       var errorMsg = $('.invalid.error-msg'); 
       errorMsg.isPresent().then(function (Present) { 
        if (Present) { 
         msg = errorMsg.getText(); 
        } 
        else { 
         msg = 'Valid'; 
        } 
       }); 
      } 
      else { 
       msg = 'No input is provided'; 
      } 
      return msg; 
     }); 
    } 

et mon code est ici:

it('Provider VAT number validation with invalid VAT number',function() { 
     ProviderVatNumber.sendKeys('IMEZ'); 
     element(by.tagName("body")).click(); 
     body.click(); 
     browser.sleep(3000); 
     ccc = giveWrittenValue(ProviderVatNumber); 
     expect(ccc).toBe('Invalid VAT number'); 
}); 

Je pense qu'il ya un certain problème dans la fonction. S'il vous plaît quelqu'un m'aider à cet égard.

+0

pouvez-vous s'il vous plaît expliquer ce que vous voulez exactement .. où vous voulez utiliser la valeur console.log? – Nikita

+0

Je souhaite récupérer un journal de console spécifique généré à partir de mon code. Basé sur le journal de la console généré Je veux vérifier si mon test est réussi ou échoué @ Nikita –

+0

Je suggérerais de trouver un meilleur moyen de tester la fonctionnalité sur laquelle vous travaillez ... ce n'est pas un scénario réaliste pour tester une application de production. Si quoi que ce soit, au lieu d'écrire cette valeur sur la console, il suffit de l'injecter dans un élément HTML et ensuite de vérifier qu'il existe là. – Gunderson

Répondre

0

Vous pouvez utiliser ce qui suit pour récupérer les journaux de la console, puis effectuez une assertion sur eux:

browser.manage().logs().get('browser').then(function(browserLog) { 
    // Replace the following with an Assert statement 
    console.log('log: ' + require('util').inspect(browserLog)); 
    // expect(browserLog.length).toEqual(0); 
}); 

https://github.com/angular/protractor/blob/master/docs/faq.md#how-can-i-get-hold-of-the-browsers-console

Check there were no errors in the browser console with Protractor

+0

J'ai mis à jour mon message avec du code. pouvez-vous aider à ce sujet? @John Stennett –

0

La manière est la suivante:

browser.manage().logs().get('browser').then(function(consoleLogs) { 
    // consoleLogs is an array of objects with level and message fields 
    // for example in the level property you can also check if it's an error through level.value > 900 
}); 

Mais la question est: pourquoi d tu fais ça? C'est en fait une pratique vraiment inhabituelle de tester quelque chose affiché dans la console (en particulier dans les tests e2e). Les tests e2e ne devraient pas tester ce genre de choses.

p.s. Gardez à l'esprit que le chrome fournit la méthode assert qui pourrait être utilisé pour tester directement vos journaux:

console.assert(1 > 2, {"message":"1 it's not greater than 2"}); 
+0

Bonjour, je viens de mettre à jour mon message avec le code. Pouvez-vous aider à ce sujet? @quirummo –

+0

Vous devez d'abord renvoyer la valeur dans votre fonction giveWrittenValue. Puis quand vous appelez que vous devez utiliser alors. Toutes les méthodes de rapporteur rapportent des promesses parce qu'elles sont asynchrones. Juste fyi, j'ai compris que vous avez changé votre code et que vous avez mis à jour toutes les questions. Mais la bonne façon de faire cela sur SO est de laisser l'ancien texte de la question et d'ajouter une édition à la fin avec le nouveau code. Si vous changez complètement votre question, toutes les réponses à la première question vous sembleront dingues si un utilisateur à l'avenir regarde la question – quirimmo