Winkelmesser - Debuggen

Nachdem wir in den vorherigen Kapiteln alle Konzepte von Winkelmesser gesehen haben, wollen wir die Debugging-Konzepte in diesem Kapitel im Detail verstehen.

Einführung

End-to-End-Tests (e2e) sind sehr schwer zu debuggen, da sie vom gesamten Ökosystem dieser Anwendung abhängen. Wir haben gesehen, dass sie von verschiedenen Aktionen abhängen, oder insbesondere können wir sagen, dass sie von früheren Aktionen wie der Anmeldung abhängen und manchmal von der Erlaubnis abhängen. Eine weitere Schwierigkeit beim Debuggen von e2e-Tests ist die Abhängigkeit von WebDriver, da es bei verschiedenen Betriebssystemen und Browsern unterschiedlich funktioniert. Schließlich erzeugt das Debuggen von e2e-Tests auch lange Fehlermeldungen und macht es schwierig, browserbezogene Probleme und Testprozessfehler zu trennen.

Arten von Fehlern

Es kann verschiedene Gründe für den Ausfall von Testsuiten geben, und im Folgenden sind einige bekannte Fehlertypen aufgeführt:

WebDriver-Fehler

Wenn ein Befehl nicht ausgeführt werden kann, wird von WebDriver ein Fehler ausgegeben. Beispielsweise kann ein Browser die definierte Adresse nicht abrufen oder ein Element wird nicht wie erwartet gefunden.

Unerwarteter WebDriver-Fehler

Ein unerwarteter Browser- und Betriebssystemfehler tritt auf, wenn der Webtreiber-Manager nicht aktualisiert werden kann.

Winkelmesserfehler für Angular

Der Fehler von Protractor for Angular tritt auf, wenn Protractor Angular nicht wie erwartet in der Bibliothek gefunden hat.

Winkelmesser Angular2 Fehler

Bei dieser Art von Fehler schlägt der Winkelmesser fehl, wenn der Parameter useAllAngular2AppRoots in der Konfiguration nicht gefunden wird. Dies geschieht, weil der Testprozess ohne dies ein einzelnes Stammelement betrachtet und dabei mehr als ein Element im Prozess erwartet.

Winkelmesserfehler wegen Zeitüberschreitung

Diese Art von Fehler tritt auf, wenn die Testspezifikation eine Schleife oder einen langen Pool erreicht und die Daten nicht rechtzeitig zurückgegeben werden.

Erwartungsfehler

Einer der häufigsten Testfehler, der zeigt, wie ein normaler Erwartungsfehler aussieht.

Warum ist das Debuggen in Winkelmessern wichtig?

Angenommen, wenn Sie Testfälle geschrieben haben und diese fehlgeschlagen sind, ist es sehr wichtig zu wissen, wie diese Testfälle zu debuggen sind, da es sehr schwierig ist, den genauen Ort zu finden, an dem der Fehler aufgetreten ist. Während der Arbeit mit Protractor werden in der Befehlszeile einige lange Fehler in roter Schrift angezeigt.

Anhalten und Debuggen des Tests

Die Möglichkeiten zum Debuggen in Protractor werden hier erläutert & miuns;

Pausenmethode

Die Verwendung der Pausenmethode zum Debuggen der Testfälle in Protractor ist eine der einfachsten Möglichkeiten. Wir können den folgenden Befehl an der Stelle eingeben, an der wir unseren Testcode anhalten möchten & miuns;

browser.pause();

Wenn die laufenden Codes den obigen Befehl treffen, wird das laufende Programm an diesem Punkt angehalten. Danach können wir die folgenden Befehle nach unseren Wünschen geben -

Geben Sie C ein, um vorwärts zu kommen

Immer wenn ein Befehl erschöpft ist, müssen wir C eingeben, um vorwärts zu kommen. Wenn Sie nicht C eingeben, führt der Test nicht den vollständigen Code aus und schlägt aufgrund eines Jasmine-Timeout-Fehlers fehl.

Geben Sie repl ein, um den interaktiven Modus aufzurufen

Der Vorteil des interaktiven Modus besteht darin, dass wir die WebDriver-Befehle an unseren Browser senden können. Wenn wir in den interaktiven Modus wechseln möchten, geben Sie einrepl.

Geben Sie Strg-C ein, um die Tests zu beenden und fortzusetzen

Um den Test aus dem Pausenzustand zu beenden und den Test dort fortzusetzen, wo er gestoppt wurde, müssen Sie Strg-C eingeben.

Beispiel

In diesem Beispiel wird die folgende Spezifikationsdatei benannt example_debug.jsDer Winkelmesser versucht, ein Element mit dem Locator zu identifizieren by.binding('mmmm') aber die URL (https://angularjs.org/ Seite hat kein Element mit angegebenem Locator.

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!')
   });
});

Um den obigen Test auszuführen, müssen wir in der obigen Spezifikationsdatei den Code browser.pause () hinzufügen, in dem Sie den Test anhalten möchten. Es wird wie folgt aussehen -

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!')
   });
});

Vor der Ausführung müssen wir jedoch auch einige Änderungen an der Konfigurationsdatei vornehmen. Wir nehmen die folgenden Änderungen in der zuvor verwendeten Konfigurationsdatei mit dem Namen vorexample_configuration.js im vorigen Kapitel -

// 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);
   }
};

Führen Sie nun den folgenden Befehl aus:

protractor example_configuration.js

Der Debugger wird nach dem obigen Befehl gestartet.

Debugger-Methode

Die Verwendung der Pause-Methode zum Debuggen der Testfälle in Protractor ist etwas fortgeschritten. Wir können den folgenden Befehl an der Stelle eingeben, an der wir unseren Testcode brechen möchten:

browser.debugger();

Es verwendet den Node-Debugger, um den Testcode zu debuggen. Um den obigen Befehl auszuführen, müssen Sie den folgenden Befehl in eine separate Eingabeaufforderung eingeben, die vom Speicherort des Testprojekts aus geöffnet wurde:

protractor debug protractor.conf.js

Bei dieser Methode müssen wir auch C in das Terminal eingeben, um den Testcode fortzusetzen. Im Gegensatz zur Pausenmethode darf diese Methode jedoch nur einmal eingegeben werden.

Beispiel

In diesem Beispiel verwenden wir dieselbe Spezifikationsdatei mit dem Namen bexample_debug.js, oben verwendet. Der einzige Unterschied ist, dass stattbrowser.pause()müssen wir verwenden browser.debugger()wo wir den Testcode brechen wollen. Es wird wie folgt aussehen -

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!')
   });
});

Wir verwenden dieselbe Konfigurationsdatei. example_configuration.js, im obigen Beispiel verwendet.

Führen Sie nun den Winkelmessertest mit der folgenden Debug-Befehlszeilenoption aus

protractor debug example_configuration.js

Der Debugger wird nach dem obigen Befehl gestartet.