Co to jest przeglądarka.ignoresynchronizacja w kątomierzu?

Widziałem to tyle razy, gdzie ludzie sugerują, aby użyć:

browser.ignoreSynchronization=true;  // or false
Ale nie rozumiem, dlaczego tego potrzebujemy?
Author: Priyanshu Shekhar, 2015-03-02

2 answers

Prosta odpowiedź jest taka, że sprawia, że kątomierz nie czeka na kątowe obietnice, takie jak te z $http lub $timeout do rozwiązania, które możesz chcieć zrobić, jeśli testujesz zachowanie podczas $http lub $timeout (np. komunikat "Ładowanie") lub testujesz nie-kątowe witryny lub strony, takie jak oddzielna strona logowania.

Na przykład, aby przetestować przycisk, który ustawia komunikat ładowania podczas żądania, możesz ustawić go na true podczas pobierania elementu + sprawdzania jego zawartości

element(by.css('button[type="submit"]')).click();
browser.ignoreSynchronization = true;
expect(element(by.css('.message')).getText().toBe('Loading...');    
browser.ignoreSynchronization = false;
expect(element(by.css('.message')).getText().toBe('Loaded'); 

A więcej odpowiedź jest taka, że ustawienie go na true oznacza, że kolejne dodatki / zastrzyki do przepływu kontrolnego również nie dodają browser.waitForAngular. Istnieją przypadki, gdy zrozumienie przepływu sterowania i kiedy / jak rzeczy są dodawane / wstrzykiwane do niego jest ważne. Na przykład, jeśli używasz browser.wait do testowania wieloetapowego procesu, funkcja przekazana do {[11] } jest wstrzykiwana do przepływu sterowania po reszta funkcji w teście została dodana do sterowania / align = "left" /

element(by.css('button[type="submit"]')).click();
browser.ignoreSynchronization = true;
expect(element(by.css('.message')).getText().toBe('Stage 1');
browser.wait(function () {
   // This function is added to the control flow after the final
   // browser.ignoreSynchronization = false in the test
   // so we need to set it again here 
   browser.ignoreSynchronization = true;
   return element(by.cssContainingText('.message', 'Stage 2')).isPresent().then(function(isPresent) { 
     // Cleanup so later tests have the default value of false
     browser.ignoreSynchronization = false;
     return !isPresent;
   });
});
expect(element(by.css('.message')).getText().toBe('Stage 2');
browser.ignoreSynchronization = false;
expect(element(by.css('.message')).getText().toBe('Stage 3');
Alternatywą dla korzystania z browser.ignoreSynchronization jest bezpośredni dostęp do standardowego interfejsu API webdriver
element(by.css('button[type="submit"]')).click();
expect(browser.driver.findElement(by.css('.message')).getText().toBe('Loading...');    
expect(element(by.css('.message')).getText().toBe('Loaded'); 

Użycie metod sterownika bezpośrednio do znalezienia elementów oznacza, że system będzie próbował je znaleźć bez czekania na bieżące żądania $http, podobnie jak ustawienie browser.ignoreSynchronization = true.

 68
Author: Michal Charemza,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-09 08:09:56

To ustawienie określa, czy kątomierz powinien czekać na kąt na stronie, czy nie. Nie jest to poprawnie udokumentowane, ale oto ciąg dokumentacji z kodu :

/**
   * If true, Protractor will not attempt to synchronize with the page before
   * performing actions. This can be harmful because Protractor will not wait
   * until $timeouts and $http calls have been processed, which can cause
   * tests to become flaky. This should be used only when necessary, such as
   * when a page continuously polls an API using $timeout.
   *
   * @type {boolean}
   */

Innymi słowy, jeśli testujesz przeciwko Nie-kątowemu zestawowi miejsca ignoreSynchronization ustawionemu na true. Jako przykład z prawdziwego świata, zobacz jedno z wyzwań, jakie miałem podczas otwierania strony nie-kątowej z strony kątowej: strona nie-kątowa otwarta po kliknięciu .

 16
Author: alecxe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:04