각도기에서 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
'code' 카테고리의 다른 글
Android Studio : javadoc 첨부 방법 (0) | 2020.12.12 |
---|---|
Android gradle 빌드 오류 : (9, 0) Gradle DSL 메서드를 찾을 수 없음 : 'compile ()'. (0) | 2020.12.12 |
전자에서 DOM 요소에 액세스하는 방법은 무엇입니까? (0) | 2020.12.12 |
Enum 값이 같으면 어떤 Enum 상수를 얻을 수 있습니까? (0) | 2020.12.12 |
OpenAI에서 새로운 체육관 환경을 만드는 방법은 무엇입니까? (0) | 2020.12.12 |