네, 대기 중 여러 유형을 사용하는 것이 좋습니다. 암시 적 대기 시간의 95 %를 사용하지만 일부 조건을 명시 적으로 대기해야합니다. 앱이 완전히 각도로 올바르게 동기화되어 있습니다 (즉, 해결되지 않은 $ http 호출이없는 경우 - more info) 각도기가 앱의 준비가되었는지 알기 쉽기 때문에 기다리지 않아도됩니다. 그러나 귀하의 응용 프로그램을 잘 모르겠다. 귀하의 사례에 대해 사실이 아닐 수도 있습니다. 주제에 대한 몇 가지 생각을 드리겠습니다 :
묵시적 : 이것은 일관성과 안정성 모두를위한 최선의 방법입니다. . 나는 당신에게 도전 할 것이고 대부분의 대기 문제가 암시 적 대기의 적절한 사용으로 해결 될 수 있다고 말한다. (더 강한 유스 케이스, 여러 조건에 걸쳐 복합 등). 그러나 다시, 나는 당신의 애플 리케이션을 모른다, 나는 그것이 다시 생각할만한 가치가 있다고 생각한다. here 목록을 검토 할 수 있습니다. 자주 사용하는 것은 presenceOf()
, visibilityOf()
및 그 대응 부분 인 stalenessOf()
및 invisibilityOf()
입니다.
명시 적 : 나는 이것을 피하기 위해 열심히 노력하지만, 어떤 경우에는 필자가 필요하다는 것을 알았습니다. 몇 초가 걸리는 애니메이션과 같은 암시 적 대기로 추적 할 것이 없습니다.
// wait for an attribute to be present i.e. "ng-invalid" to be added to a class
// el = element, attr = attribute to check (i.e. class, id etc), target = attribute value to look for
Util.prototype.waitForAttributePresent = function (el, attr, target, time) {
var timeout = time || 0;
return browser.wait(function() {
return el.getAttribute(attr).then(function (val) {
return ~val.indexOf(target) < 0;
});
}, timeout);
};
사용 사례 :
// waits 5 seconds for the elements class to contain "active"
var el = $('div');
Util.waitForAttributePresent(el, 'class', 'active', 5000);
expect(true).toBe(true);
정적 : 나는 그런 아래와 같은 더 암시 대기 접근 방법을 시도하고 이러한 시나리오를 캡처하고 사용하는 내 자신의 몇 가지 방법을 만들었습니다 static으로 무엇을 의미하는지 확신 할 수 없으며, 명시적인 대기와 동일하게 들립니다. 어떤 조건을 기반으로하지 않고 일정 시간 동안 중지합니다.