code

각도기에서 browser.ignoreSynchronization은 무엇입니까?

codestyles 2020. 12. 12. 10:53
반응형

각도기에서 browser.ignoreSynchronization은 무엇입니까?


나는 사람들이 사용하도록 제안하는 곳을 여러 번 보았습니다.

browser.ignoreSynchronization=true;  // or false

하지만 왜 필요한지 이해가 안 돼요?


간단한 대답은 각도기가에서 $http또는 $timeout해결 하는 것과 같은 Angular 약속을 기다리지 않도록 하는 것입니다. 이는 $http또는 동안 동작을 테스트하는 경우 $timeout(예 : "로드 중"메시지) 또는 비 별도의 로그인 페이지와 같은 각도 사이트 또는 페이지.

예를 들어 요청 중에 로딩 메시지를 설정하는 버튼을 테스트 true하려면 요소를 가져 와서 내용을 확인할 때 이를 설정할 수 있습니다.

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'); 

더 복잡한 대답은으로 설정 true하면 제어 흐름에 대한 후속 추가 / 주입도 추가되지 않는다는 것 browser.waitForAngular입니다. 제어 흐름에 대한 이해가 중요하고 언제 / 어떻게 추가 / 주입되는지가 중요한 경우가 있습니다. 예를 들어을 사용하여 browser.wait다단계 프로세스를 테스트하는 경우 테스트 의 나머지 함수가 제어 흐름에 추가 된 전달 wait함수가 제어 흐름에 삽입됩니다.

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');

사용에 대한 대안 browser.ignoreSynchronization은 표준 웹 드라이버 API에 직접 액세스하는 것입니다.

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'); 

드라이버 메서드를 직접 사용하여 요소를 찾는 것은 시스템이 $http설정과 마찬가지로 진행중인 요청이 완료 될 때까지 기다리지 않고 해당 요소를 찾으려는 것을 의미 합니다 browser.ignoreSynchronization = true.


이 설정은 각도기가 페이지에서 각도를 기다려야하는지 여부를 제어합니다. 제대로 문서화되지 않았지만 다음은 코드문서 문자열입니다 .

/**
   * 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}
   */

즉, 각도가 아닌 사이트에 대해 테스트하는 경우 ignoreSynchronization설정을 true. 실제 사례로 각도 페이지에서 각도가 아닌 페이지를 열 때 겪었던 문제 중 하나를 참조 하십시오 . 클릭 후 각도가 아닌 페이지가 열립니다 .

참고 URL : https://stackoverflow.com/questions/28808463/what-is-browser-ignoresynchronization-in-protractor

반응형