Kątomierz - debugowanie
Teraz, gdy widzieliśmy już wszystkie koncepcje Protractora w poprzednich rozdziałach, przyjrzyjmy się szczegółowo koncepcjom debugowania w tym rozdziale.
Wprowadzenie
Testy typu end-to-end (e2e) są bardzo trudne do debugowania, ponieważ zależą od całego ekosystemu tej aplikacji. Widzieliśmy, że zależą one od różnych działań lub w szczególności możemy powiedzieć, że od wcześniejszych działań, takich jak logowanie, a czasami zależą one od pozwolenia. Inną trudnością w debugowaniu testów e2e jest jego zależność od WebDriver, ponieważ działa on różnie w różnych systemach operacyjnych i przeglądarkach. Wreszcie, debugowanie testów e2e generuje również długie komunikaty o błędach i utrudnia oddzielenie problemów związanych z przeglądarką od błędów procesu testowania.
Rodzaje awarii
Przyczyny niepowodzenia zestawów testów mogą być różne, a następujące są dobrze znane typy błędów:
Błąd WebDriver
Gdy polecenie nie może zostać zakończone, WebDriver zgłasza błąd. Na przykład przeglądarka nie może pobrać zdefiniowanego adresu lub element nie został znaleziony zgodnie z oczekiwaniami.
Nieoczekiwana awaria WebDriver
Nieoczekiwana awaria przeglądarki i systemu operacyjnego występuje, gdy nie udaje się zaktualizować menedżera sterowników sieciowych.
Awaria kątomierza dla Angular
Awaria Protractor for Angular ma miejsce, gdy Protractor nie znalazł Angulara w bibliotece zgodnie z oczekiwaniami.
Awaria kątomierza Angular2
W przypadku tego rodzaju awarii Protractor zakończy się niepowodzeniem, jeśli parametr useAllAngular2AppRoots nie zostanie znaleziony w konfiguracji. Dzieje się tak, ponieważ bez tego proces testowy będzie patrzył na jeden element główny, oczekując więcej niż jednego elementu w procesie.
Błąd kątomierza z powodu przekroczenia limitu czasu
Ten rodzaj niepowodzenia ma miejsce, gdy specyfikacja testu trafia w pętlę lub długą pulę i nie zwraca danych na czas.
Błąd oczekiwania
Jeden z najczęstszych niepowodzeń testów, który pokazuje, jak wygląda normalny błąd oczekiwania.
Dlaczego debugowanie jest ważne w Protractorze?
Załóżmy, że jeśli napisałeś przypadki testowe i zakończyły się niepowodzeniem, bardzo ważne jest, aby wiedzieć, jak debugować te przypadki testowe, ponieważ bardzo trudno byłoby znaleźć dokładne miejsce, w którym wystąpił błąd. Podczas pracy z Kątomierzem w wierszu poleceń pojawią się długie błędy w czerwonej czcionce.
Wstrzymywanie i debugowanie testu
Sposoby debugowania w Protractorze są wyjaśnione tutaj & miuns;
Metoda pauzy
Użycie metody pause do debugowania przypadków testowych w Protractorze jest jednym z najłatwiejszych sposobów. Możemy wpisać następującą komendę w miejscu, w którym chcemy wstrzymać nasz kod testowy & miuns;
browser.pause();
Kiedy działające kody trafią w powyższe polecenie, wstrzyma działający program w tym momencie. Następnie możemy wydać następujące polecenia zgodnie z naszymi preferencjami -
Wpisz C, aby przejść do przodu
Za każdym razem, gdy polecenie się wyczerpie, musimy wpisać C, aby przejść do przodu. Jeśli nie wpiszesz C, test nie uruchomi pełnego kodu i zakończy się niepowodzeniem z powodu przekroczenia limitu czasu przez Jasmine.
Wpisz repl, aby przejść do trybu interaktywnego
Zaletą trybu interaktywnego jest to, że możemy wysyłać polecenia WebDriver do naszej przeglądarki. Jeśli chcemy wejść w tryb interaktywny, wpiszrepl.
Naciśnij Ctrl-C, aby wyjść i kontynuować testy
Aby wyjść z testu ze stanu pauzy i kontynuować test od miejsca, w którym został zatrzymany, musimy nacisnąć Ctrl-C.
Przykład
W tym przykładzie mamy nazwany poniższy plik specyfikacji example_debug.js, kątomierz próbuje zidentyfikować element za pomocą lokalizatora by.binding('mmmm'), ale adres URL (https://angularjs.org/ strona nie zawiera elementu z określonym lokalizatorem.
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!')
});
});
Teraz, aby wykonać powyższy test, musimy dodać kod browser.pause (), w którym chcesz wstrzymać test, w powyższym pliku specyfikacji. Będzie wyglądać następująco -
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!')
});
});
Ale przed wykonaniem musimy również dokonać pewnych zmian w pliku konfiguracyjnym. Wprowadzamy następujące zmiany we wcześniej używanym pliku konfiguracyjnym o nazwieexample_configuration.js w poprzednim rozdziale -
// 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);
}
};
Teraz uruchom następujące polecenie -
protractor example_configuration.js
Debugger uruchomi się po powyższym poleceniu.
Metoda debuggera
Używanie metody pause do debugowania przypadków testowych w Protractorze jest nieco zaawansowanym sposobem. Możemy wpisać następujące polecenie w miejscu, w którym chcemy złamać nasz kod testowy -
browser.debugger();
Używa debugera węzłów do debugowania kodu testu. Aby uruchomić powyższe polecenie, musimy wpisać następujące polecenie w osobnym wierszu polecenia, który został otwarty z lokalizacji projektu testowego -
protractor debug protractor.conf.js
W tej metodzie musimy również wpisać C w terminalu, aby kontynuować kod testowy. Ale w przeciwieństwie do metody pauzy, w tej metodzie należy wpisać tylko jeden raz.
Przykład
W tym przykładzie używamy tego samego pliku specyfikacji o nazwie bexample_debug.js, użyte powyżej. Jedyna różnica polega na tym, że zamiastbrowser.pause(), musimy użyć browser.debugger()gdzie chcemy złamać kod testowy. Będzie wyglądać następująco -
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!')
});
});
Używamy tego samego pliku konfiguracyjnego, example_configuration.js, użyte w powyższym przykładzie.
Teraz uruchom test kątomierza z następującą opcją wiersza poleceń debugowania
protractor debug example_configuration.js
Debugger uruchomi się po powyższym poleceniu.