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.