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.