2017-03-07 1 views
12

waitForAngularEnabled()가 어떻게 작동하는지 궁금합니다. 그러나 복잡하지는 않지만 어디서든 만족스러운 답변을 얻을 수는 없습니다. 누군가가 나를 지우는 데 도움이되기를 바랍니다.waitForAngularEnabled는 어떻게 작동합니까?

내 목표는 기준을 확인하고 기준이 충족 될 때까지 실행중인 테스트를 일시 중지/잠그는 것입니다. 예를 들면 다음과 같습니다.

A. 테스트를 실행 일시 정지 및 페이지가 그래서는 A

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

과 유사한 목적을 위해 browser.wait(), 대체 방법을 사용 B.

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

를로드 할 때까지 대기 질문 :

  1. 일단 waitForAngularEnabled (false)가 호출되면 어떻게됩니까? (기준이 충족되거나 시간 초과가 발생한 경우)
  2. 정상 테스트를 계속하려면 waitForAngularEnabled (true)를 취소해야합니까?
  3. 내가해야한다면, 어디에 넣을 까?

    희망

는 몇 가지 배경의 원칙에 명확한 답을 얻을 수 있습니다.

감사합니다!

+0

각도기의 API 문서를 보았습니까? http://www.protractortest.org/#/api?view=ProtractorBrowser.prototype.waitForAngular AND http://www.protractortest.org/#/api?view=ProtractorBrowser.prototype.waitForAngularEnabled –

+1

예, 했어요. ,하지만 나는 만족하지 못했습니다. # 1 질문에 대답 해 주시겠습니까? 미리 감사드립니다. – first87

+0

질문 # 1에 대답하려면 왜 처음부터 꺼야하는지 알아야합니다. Angular 끝에서 $ http 또는 $ timeout 폴링과 관련된 시간 초과가 있습니까? 또한,이 함수는'browser.ignoreSynchronization'을 대체 한 것으로 보이며,'waitForAngular()'함수 내에서이 함수를 사용할지 여부를 결정하는 데 사용됩니다. 두 사람의 차이점은 무엇입니까 – Gunderson

답변

13

1. waitForAngularEnabled (false)가 호출되면 어떻게됩니까? (일단 기준이 충족되거나 시간 초과가 발생하면

경험적으로 이것이 각도기가 단지 Webdriver로 작동하는 것으로 나타났습니다. Angular가 "정착"(보류중인 HTTP 요청 또는보기 업데이트 없음)을 기다리지 않으며 이는 true의 동작입니다. 대신 false 설정을 사용하는 경우 일반 Webdriver 테스트에서와 같이 테스트 단계를 안정적으로 실행하기위한 전제 조건을 확인하기 위해 ExpectedConditions 또는 유사한 방법을 사용해야합니다.

2. 정상 테스트를 계속하려면 waitForAngularEnabled (true)를 취소해야합니까?

예. 그러나 나는 Protractor 5.1.1 및 5.1.2에서 제어 흐름을 사용하는지 여부에 관계없이 같은 실행에서 테스트에서 다른 waitForAngularEnabled 값을 산란하면 예기치 않은 결과가 나타나는 것으로 나타났습니다. 즉, 사용 가능 상태가 다른 각도기/Webdriver 호출과 동일한 비동기 의미를 따르지 않습니다. 지금까지, 내 ​​결론은 동일한 실행에서 waitForAngularEnabled (false)와 waitForAngularEnabled (true)를 안정적으로 혼합 할 수 없다는 것입니다. 나는 이것이 분계기 버그라고 의심하지만 분지기 문제를 제출하는 것을지지하기 위해 그것을 증명할 수있는 간단하고 신뢰할 수있는 시험을 아직 개발하지 못했습니다. 아마도 관련 문제 (here)가 있었으나 현재는 닫혀 있지만 불완전한 진단을 받았습니다.

3. 내가해야한다면, 어디에 넣어야합니까?

"Before"각도를 기다리는 의미를 복원해야하는 각도기/Webdriver 호출을 수행합니다.그러나 앞서 언급했듯이 이러한 호출이 실제로 true 설정의 컨텍스트에서 이루어질 것이라는 것을 확실하게 보장 할 수 있는지 여부는 확실하지 않습니다.

당신이 falsetrue을 사용하는 일부 검사를해야하는 경우, 별도의 실행에서 그들을 실행할 수 있습니다 (별도의 프로세스, 같은 protractor 또는 ng e2e 명령을 실행하지 마십시오). 그 접근법이 취해질 때 아무런 문제가 발생하지 않았습니다.

+0

답변 해 주셔서 감사합니다. 그들은 충분히 풍부하고 나에게 매우 도움이되며, 따라서 필로타와 함께 일할 수있는 몇 가지 유용한 협약을 얻을 수 있습니다. 다시 한번 감사드립니다, 윌. – first87

+0

좋습니다. 더 많은 공식 정보가 나오거나 버그가 고쳐 지거나 고쳐지기를 바랍니다.이를 개선 할 수 있기를 바랍니다. – Will

+0

[이 문제] (https://github.com/angular/protractor/issues/4233)와 비슷한 Angular 4와 함께 'waitForAngularEnabled (true)'를 사용하는 중에 문제가 발생했습니다. – Will