2017-03-07 32 views
12

Jestem ciekawa, jak działa funkcja waitForAngularEnabled()? Chociaż nie wydaje się to skomplikowane, nie mogłem uzyskać żadnych satysfakcjonujących odpowiedzi. Mam więc nadzieję, że ktoś pomoże mi zostać oczyszczonym.Jak działa funkcja waitForAngularEnabled?

Moim celem jest sprawdzenie kryteriów i wstrzymanie/zablokowanie bieżącego testu do momentu spełnienia kryteriów. Oto przykłady na przykład.

A. wstrzymać testu uruchomiony i czekać, aż strona zostanie załadowana

... 
    let theElement = ...; 
    browser.waitForAngularEnabled(false); 
    browser.wait(protractor.ExpectedConditions.presenceOf(theElement)); 

B. użyć browser.wait(), alternatywnym sposobem na podobnym przeznaczeniu A

browser.wait(() => { 
     browser.waitForAngularEnabled(false); 
     return browser.isElementPresent(by.id('the-element-id')); 
    }, timeout); // timeout may not be given 

WIĘC Pytanie brzmi:

  1. Co stanie się po wywołaniu waitForAngularEnabled (false)? (po spełnieniu kryteriów lub przekroczeniu limitu czasu w moim przypadku)
  2. Czy należy przywrócić funkcję waitForAngularEnabled (true), aby kontynuować normalne testowanie?
  3. Jeśli powinienem zrobić, gdzie go umieścić?

nadzieję uzyskać jednoznaczną odpowiedź z jakiejś zasady tła.

Dzięki!

+0

Czy widziałeś dokument API z kątomierzem? http://www.protractortest.org/#/api?view=ProtractorBrowser.prototype.waitForAngular AND http://www.protractortest.org/#/api?view=ProtractorBrowser.prototype.waitForAngularEnabled –

+1

Tak, zrobiłem , ale nie byłem zadowolony. Czy możesz odpowiedzieć na pytanie nr 1? Z góry dzięki. – first87

+0

, aby odpowiedzieć na pytanie nr 1, musimy wiedzieć, dlaczego go wyłączasz. Czy otrzymujesz limity czasu związane z sondowaniem $ http lub $ timeout na końcu Angular? Również wygląda na to, że ta funkcja jest tylko zamiennikiem 'browser.ignoreSynchronization', i jest używana w funkcji' waitForAngular() ', aby określić, czy z niej korzystać. Taka jest różnica między tymi dwoma – Gunderson

Odpowiedz

13

1. Co stanie się po wywołaniu waitForAngularEnabled (false)? (po spełnieniu kryteriów lub przekroczeniu limitu czasu w moim przypadku)

Empirycznie stwierdziłem, że to wydaje się powodować, że Kątomierz zachowuje się jak zwykły program Webdriver. Nie czeka, aż Angular się "uspokoi" (brak oczekujących żądań HTTP lub aktualizacji widoku), co jest zachowaniem dla true. Zamiast tego, jeśli używasz ustawienia false, będziesz musiał użyć ExpectedConditions lub podobnych metod w celu zweryfikowania warunków wstępnych do niezawodnie wykonanych kroków testowych, tak jak w zwykłym teście Webdriver.

2. Czy należy przywrócić funkcję waitForAngularEnabled (true), aby kontynuować normalne testowanie?

Tak. Jednakże odkryłem, że w Kątomierzu 5.1.1 i 5.1.2, niezależnie od tego, czy używa się przepływu sterowania, czy nie, rozpraszanie różnych wartości waitForAngularEnabled podczas testów w tej samej wersji wydaje się dawać nieprzewidywalne wyniki; oznacza to, że włączony stan nie przebiega zgodnie z tą samą asynchroniczną semantyką innych połączeń kątomierza/Webdrivera. Do tej pory mój wniosek jest taki, że nie można wiarygodnie zmieszać waitForAngularEnabled (false) i waitForAngularEnabled (true) w tym samym wykonaniu. Podejrzewam, że jest to błąd Kątomierza, ale nie opracowałem jeszcze prostego i niezawodnego testu, który udowodniłby to w celu poparcia problemu z Kątomierzem. Był prawdopodobnie powiązany problem here, teraz zamknięty, ale niecałkowicie zdiagnozowany.

3. Jeśli powinienem zrobić, gdzie go umieścić?

"Zanim" wykonasz wywołania Kątomierz/Webdriver, które wymagają przywrócenia semantyki oczekiwania na pryzmat.Jednak, jak wspomniano powyżej, nie jest jasne, czy można niezawodnie zagwarantować, że takie połączenia będą naprawdę wykonane w kontekście ustawienia true.

Jeśli trzeba mieć pewne testy, które używają false i innych true, można uruchomić je w osobnych egzekucji (osobne procesy, nie uruchamiać je z tego samego polecenia protractor lub ng e2e). Nie napotkałem żadnych problemów, kiedy takie podejście zostało podjęte.

+0

Dziękuję za odpowiedzi. Są dostatecznie bogaci i bardzo pomocni, więc mogę uzyskać przydatne konwencje do pracy z Kątnikiem. Jeszcze raz dziękuję, Will. – first87

+0

Świetnie. Mam nadzieję, że wraz z pojawieniem się większej liczby oficjalnych informacji lub zgłoszeniem błędów lub poprawkami, możemy poprawić to. – Will

+0

Napotkano problemy przy użyciu 'waitForAngularEnabled (true)' z Angular 4, podobnie jak [ten problem] (https://github.com/angular/protractor/issues/4233). – Will