Comment puis-je afficher la sortie console.log dans un test de jasmin angularjs rapporteur? Pour l'instant, le navigateur se ferme trop rapidement.
plus d'informations - Je travaille avec le tutoriel angularjs, étape 8. J'essaie de changer le test e2e en rapporteur. Le fichier de configuration du rapporteur que j'utilise est basé sur% appdata%\npm\node_modules\protractor\referenceConf.js. Dans les fichiers spec js référencés par le fichier de configuration, j'ai des instances de console.log. Cependant, lors de l'exécution du test du rapporteur e2e, le site Web s'ouvre en chrome, je vois des choses se produire dans le navigateur, puis le navigateur se ferme avant que je puisse examiner n'importe quelle sortie de console.log. Je pense que je dois garder chrome ouvert en quelque sorte. Comment?
Utilisez browser.manage().logs().get('browser')
browser.manage().logs().get('browser').then(function(browserLogs) {
// browserLogs is an array of objects with level and message fields
browserLogs.forEach(function(log){
if (log.level.value > 900) { // it's an error log
console.log('Browser console error!');
console.log(log.message);
}
});
});
Une idée fausse générale est que console.log
Enregistrera les choses dans votre navigateur. C'est incorrect. Lorsque vous exécutez vos tests, ainsi que les résultats des tests, vous devriez voir les valeurs console.log()
également dans le terminal. La console du navigateur est complètement différente de cela.
Un exemple général:
it('get name as John', function(){
element(by.id('name')).getText().then(function(value){
console.log(value);
})
});
Résultats dans le terminal:
John
get name as John - pass
J'espère que ça aide.
Cela peut maintenant être réalisé sans écrire de code spécial et via des plugins:
protractor-console-plugin
(Chrome uniquement)protractor-console
Afin de garder la fenêtre du navigateur ouverte, vous devriez essayer d'exécuter Protractor en mode débogage:
$ <route-to-protractor> debug <route-to-conf-file>
Ensuite, dans votre fichier de spécifications, ajoutez cette ligne à l'endroit où vous souhaitez que l'exécution s'arrête:
browser.debugger();
Dans la console du débogueur Protractor, vous pouvez passer les arrêts en tapant c
ou cont
.
Plus d'informations ici: https://github.com/angular/protractor/blob/master/docs/debugging.md
Maintenant, afin d'obtenir le contenu de la console, vous pouvez vérifier comment le faire dans la FAQ Protractor: https://github.com/angular/protractor/blob/master/docs/faq.md#how-can- i-get-hold-of-the-browser-console
Quelque chose comme:
browser.manage().logs().get('browser').then(function(browserLog) {
console.log('log: ' + require('util').inspect(browserLog));
})
Une option simple consiste à utiliser:
browser.pause();
rapporteur/api/browser.pause
par exemple:
it('should .. test stuff', function() {
browser.pause(); //--->the automation will pause here - follow the instructions in your terminal to continue
//--->your broken testing magic here...
});
Placez cet appel de méthode en tant que premier élément du corps de spécification où vous devez afficher la console des navigateurs.
Après la pause du navigateur, vous aurez le contrôle de l'automatisation. Vous pouvez ensuite interagir avec le navigateur comme d'habitude, inspecter les éléments à différents états, vérifier la console des navigateurs, etc.
Continuez les tests en entrant c
pour continuer dans votre terminal - il y aura une invite avec des instructions en attente de votre entrée.
Vous pouvez également modifier le niveau de journalisation pour afficher d'autres types de sorties de console.
Voir ma proposition de mise à jour de la FAQ du rapporteur pour le faire ici
Vous pouvez toujours simplement remplacer console.log dans votre test :)
logMessages = [];
console.log = function(message) {
logMessages.Push(message);
}
Vous pouvez également utiliser $ log au lieu de console.log et utiliser une solution comme celle-ci pour mettre des crochets dans les messages de journal: https://Gist.github.com/lrvick/6938531