2016-06-06 6 views
4

우리의 응용 프로그램에는 진행률 표시 줄을 업데이트하는 몇 가지 질문이 있습니다. 현재 HTML 속성 변경을 기다리는 기능이 있지만 대다수의 경우 작동하지만 막대가 0 ~ 10 % 등으로 움직일 때마다 애니메이션이 1 초에서 2 초가 지나기 때문에 진행 막대에 조금 신경을 써야합니다. 나는 현재 직면하고있다 : Expected 11 to be within range 12, 14.각도기가 완료 될 때까지 애니메이션 완료

코드 :

Util.prototype.waitForAttributeChange = function (el, attr, time) { 
    var timeout = time || 0, 
     currentAttr; 

    el.getAttribute(attr).then(function (val) { 
     currentAttr = val; 
     return currentAttr; 
    }).then(function() { 
     return browser.wait(function() { 
      return el.getAttribute(attr).then(function (val) { 
       return val !== currentAttr; 
      }); 
     }, timeout); 
    }); 
}; 

사용 :

Util.waitForAttributeChange(Page.progressBar(), 'style', 10000).then(function() { 
    expect(Page.getProgressBarValue()).toBeWithinRange(12, 14); 
}; 

문제는 : 잡고 값은 그것을 잡아 때 여전히 움직이고, 진행 표시 줄의 최종 결과는 아니다 (내 함수가 속성 변경을 기다리고 속성이이 시점에서 변경 되었기 때문에)

질문 : 애니메이션을 기다릴 수있는 또 다른 방법이 있습니까? 특히 애니메이션이 완료 될 때까지 기다릴 수 있습니까? 그리고/또는 browser.sleep()을 사용하지 않고 이것이 가능합니까?

+2

방법 [모든 각도 애니메이션을 사용하지 않도록 설정]에 대한 (http://stackoverflow.com/questions/26584451/how-to-disable-animations-in-protractor-for-angular-js-application)? – alecxe

+0

그래, 나는 그 글을 보았지만, 내가하고 싶었는지 확실하지 않았다. 그 (것)들을 무능하게하기에 어떤 아래쪽 있는가? 예기치 않은 행동을 유발합니까? – Gunderson

+0

저는 개인적으로 애니메이션을 비활성화 한 후 아무런 문제가 없었던 것을 기억하지 않습니다. 반대로 나는 여분의'browser.wait()'호출을 제거한 것을 기억합니다. 그것을 시도하고 도움이되는지 확인하십시오. 감사. – alecxe

답변

0

Expected Conditions을 사용하여이 문제를 해결할 수 있습니다.

요소가 보이기를 기다릴 때마다 다음 단계를 실행하기 전에 다음 단계의 메서드를 사용합니다. 이는 다른 요소와의 상호 작용을 차단할 수있는 임시 확인 모달에 유용합니다.

let waitTimeInSeconds = 15; 
let EC = protractor.ExpectedConditions; 

secondsToMillis(seconds) { 
    return seconds * 1000; 
} 

waitToBeVisible(element: ElementFinder) { 
    browser.wait(EC.visibilityOf(element), this.secondsToMillis(waitTimeInSeconds), 'The element \'' + element.locator() + '\' did not appear within ' + waitTimeInSeconds + ' seconds.'); 
} 

waitToNotBeVisible(element: ElementFinder) { 
    browser.wait(EC.not(EC.visibilityOf(element)), this.secondsToMillis(waitTimeInSeconds), 'The element \'' + element.locator() + '\' still appeared within ' + waitTimeInSeconds + ' seconds.'); 
} 
관련 문제