Rapporteur - Débogage

Maintenant que nous avons vu tous les concepts de Protractor dans les chapitres précédents, comprenons les concepts de débogage en détail dans ce chapitre.

introduction

Les tests de bout en bout (e2e) sont très difficiles à déboguer car ils dépendent de tout l'écosystème de cette application. Nous avons vu qu'elles dépendent de diverses actions ou en particulier nous pouvons dire que des actions antérieures comme la connexion et parfois elles dépendent de l'autorisation. Une autre difficulté dans le débogage des tests e2e est sa dépendance à WebDriver car il agit différemment avec différents systèmes d'exploitation et navigateurs. Enfin, le débogage des tests e2e génère également de longs messages d'erreur et rend difficile la séparation des problèmes liés au navigateur et des erreurs de processus de test.

Types d'échec

Il peut y avoir plusieurs raisons à l'échec des suites de tests et les suivants sont des types d'échec bien connus -

Panne de WebDriver

Lorsqu'une commande ne peut pas être exécutée, une erreur est générée par WebDriver. Par exemple, un navigateur ne peut pas obtenir l'adresse définie ou un élément est introuvable comme prévu.

Panne inattendue de WebDriver

Une panne inattendue du navigateur et du système d'exploitation se produit lorsque la mise à jour du gestionnaire de pilotes Web échoue.

Panne de rapporteur pour angulaire

L'échec de Protractor for Angular se produit lorsque Protractor n'a pas trouvé Angular dans la bibliothèque comme prévu.

Panne du rapporteur angulaire2

Dans ce type d'échec, Protractor échouera lorsque le paramètre useAllAngular2AppRoots n'est pas trouvé dans la configuration. Cela se produit parce que, sans cela, le processus de test examinera un seul élément racine tout en attendant plus d'un élément dans le processus.

Panne du rapporteur pour délai d'attente

Ce type d'échec se produit lorsque la spécification de test atteint une boucle ou un long pool et ne parvient pas à renvoyer les données à temps.

L'échec des attentes

L'un des échecs de test les plus courants qui montre à quoi ressemble un échec d'attente normal.

Pourquoi le débogage est-il important dans Protractor?

Supposons que si vous avez écrit des cas de test et qu'ils ont échoué, il est très important de savoir comment déboguer ces cas de test car il serait très difficile de trouver l'endroit exact où l'erreur s'est produite. En travaillant avec Protractor, vous obtiendrez de longues erreurs dans la police de couleur rouge dans la ligne de commande.

Pause et débogage du test

Les méthodes de débogage dans Protractor sont expliquées ici & miuns;

Méthode de pause

L'utilisation de la méthode pause pour déboguer les cas de test dans Protractor est l'un des moyens les plus simples. Nous pouvons taper la commande suivante à l'endroit où nous voulons mettre en pause notre code de test & miuns;

browser.pause();

Lorsque les codes en cours d'exécution atteignent la commande ci-dessus, il mettra en pause le programme en cours à ce stade. Après cela, nous pouvons donner les commandes suivantes selon notre préférence -

Type C pour aller de l'avant

Chaque fois qu'une commande est épuisée, nous devons taper C pour avancer. Si vous ne tapez pas C, le test n'exécutera pas le code complet et échouera en raison d'une erreur de temporisation Jasmine.

Tapez repl pour entrer en mode interactif

L'avantage du mode interactif est que nous pouvons envoyer les commandes WebDriver à notre navigateur. Si nous voulons entrer dans le mode interactif, tapezrepl.

Tapez Ctrl-C pour quitter et continuer les tests

Pour quitter le test de l'état de pause et continuer le test là où il s'est arrêté, nous devons taper Ctrl-C.

Exemple

Dans cet exemple, nous avons le fichier de spécification ci-dessous nommé example_debug.js, le rapporteur essaie d'identifier un élément avec le localisateur by.binding('mmmm') mais l'URL (https://angularjs.org/ la page n'a aucun élément avec le localisateur spécifié.

describe('Suite for protractor debugger',function(){
   it('Failing spec',function(){
      browser.get("http://angularjs.org");
      element(by.model('yourName')).sendKeys('Vijay');
         //Element doesn't exist
         var welcomeText = 
         element(by.binding('mmmm')).getText();
         expect('Hello '+welcomeText+'!').toEqual('Hello Ram!')
   });
});

Maintenant, pour exécuter le test ci-dessus, nous devons ajouter le code browser.pause (), où vous souhaitez suspendre le test, dans le fichier de spécification ci-dessus. Cela ressemblera à ceci -

describe('Suite for protractor debugger',function(){
   it('Failing spec',function(){
      browser.get("http://angularjs.org");
      browser.pause();
      element(by.model('yourName')).sendKeys('Vijay');
      //Element doesn't exist
      var welcomeText = 
      element(by.binding('mmmm')).getText();
      expect('Hello '+welcomeText+'!').toEqual('Hello Ram!')
   });
});

Mais avant de l'exécuter, nous devons également apporter des modifications au fichier de configuration. Nous effectuons les modifications suivantes dans le fichier de configuration utilisé précédemment, nomméexample_configuration.js dans le chapitre précédent -

// An example configuration file.
exports.config = {
   directConnect: true,

   // Capabilities to be passed to the webdriver instance.
   capabilities: {
      'browserName': 'chrome'
   },

   // Framework to use. Jasmine is recommended.
   framework: 'jasmine',

   // Spec patterns are relative to the current working directory when

   // protractor is called.
   specs: ['example_debug.js'],
      allScriptsTimeout: 999999,
      jasmineNodeOpts: {
      defaultTimeoutInterval: 999999
   },
   onPrepare: function () {
      browser.manage().window().maximize();
      browser.manage().timeouts().implicitlyWait(5000);
   }
};

Maintenant, exécutez la commande suivante -

protractor example_configuration.js

Le débogueur démarrera après la commande ci-dessus.

Méthode de débogage

L'utilisation de la méthode pause pour déboguer les cas de test dans Protractor est un moyen un peu avancé. Nous pouvons taper la commande suivante à l'endroit où nous voulons casser notre code de test -

browser.debugger();

Il utilise le débogueur de nœud pour déboguer le code de test. Pour exécuter la commande ci-dessus, nous devons taper la commande suivante dans une invite de commande distincte qui s'est ouverte à partir de l'emplacement du projet de test -

protractor debug protractor.conf.js

Dans cette méthode, nous devons également taper C dans le terminal pour continuer le code de test. Mais contrairement à la méthode de pause, dans cette méthode, elle ne doit être saisie qu'une seule fois.

Exemple

Dans cet exemple, nous utilisons le même fichier de spécifications nommé bexample_debug.js, utilisé ci-dessus. La seule différence est qu'au lieu debrowser.pause(), nous devons utiliser browser.debugger()où nous voulons casser le code de test. Cela ressemblera à ceci -

describe('Suite for protractor debugger',function(){
   it('Failing spec',function(){
      browser.get("http://angularjs.org");
      browser.debugger();
      element(by.model('yourName')).sendKeys('Vijay');
      //Element doesn't exist
      var welcomeText = element(by.binding('mmmm')).getText();
      expect('Hello '+welcomeText+'!').toEqual('Hello Ram!')
   });
});

Nous utilisons le même fichier de configuration, example_configuration.js, utilisé dans l'exemple ci-dessus.

Maintenant, exécutez le test du rapporteur avec l'option de ligne de commande de débogage suivante

protractor debug example_configuration.js

Le débogueur démarrera après la commande ci-dessus.