2016-10-05 2 views
2

우리는 angularJS 응용 프로그램을 자동화하기 위해 프로젝트에서 각도기 3.6 버전을 사용하고 있습니다. 우리는 독립형 앵귤러 앱이 많은 iframe으로 구현 된 마스터 애플리케이션을 보유하고 있습니다.프레임 워크에서 암시 적 및 명시 적 대기 접근 방식

우리는 SPA를 직접 공격하는 앱과 Google의 마스터 통합 애플리케이션을 통해 액세스 할 수 있습니다.

현재 접근법 : 팀에서 암시 적 대기가 도움이되지 않는 위치에서 30 초와 정적 대기 (60 초)가있는 암시 적 wait()를 사용하고 있습니다.

문제점 : 테스트 스크립트를 실행할 때마다 일관성없는 결과가 표시 될 수 있으며 실행 시간이 길어질 수 있습니다.

솔루션 : 암시 적 대기 및 정적 대기에 명시 적 대기를 추가하여 일관성을 개선하고 실행 시간을 줄였습니다.

질문 : 프레임 워크에서 세 가지 대기 (암시 적 대기, 명시 적 대기, thred.sleep)를 모두 사용하면 정확합니까? 참고 : 몇 가지 탐색에서는 thread.sleep()을 사용해야했습니다. 암시 적 대기와 명시 적 대기 모두 작동하지 않습니다.

답변

1

네, 대기 중 여러 유형을 사용하는 것이 좋습니다. 암시 적 대기 시간의 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으로 무엇을 의미하는지 확신 할 수 없으며, 명시적인 대기와 동일하게 들립니다. 어떤 조건을 기반으로하지 않고 일정 시간 동안 중지합니다.

0

암시 적 대기가 작동하지 않는 이유에 대한 자세한 내용을 공유하면 커뮤니티가 기술적으로 더 효과적으로 당신을 도울 수 있습니다.

질문에 대한 간단한 대답은 SUT, 자동화 목표, 프로젝트 우선 순위에 따라 두 가지 유형의 대기 ("명시 적"과 "정적"의 차이점이 무엇인지 확실하지 않음)를 사용하는 것이 맞습니다 기술 지식

명시 적 대기가 사용 된 경우가 많았지 만 더 효율적인 암시 적 대기를 구현할 수있는 방법이있었습니다. 그러나 때로는 그렇게하기위한 노력이 이점보다 중요하기 때문에 암시 적으로 기다리는 방법을 파악하면 실행 시간을 최대한 절약하거나 (더 중요한 것은) 실행 안정성을 향상시킬 수 있습니다. 일부 분석 작업은 일반적으로 먼저 해당 영역의 위치를 ​​결정하는 데 필요합니다.

또 다른 주목할 점은 대부분의 경우 실행 안정성이 실행 시간보다 더 중요하다는 점입니다. 명시 적 대기를 사용하면보다 안정된 테스트가 발생하면 명시 적으로 대기하는 것이 절대적으로 효과적입니다. 안정화를 유지하면서 대기 시간을 줄이는 방법을 찾기 위해 최적화 라운드 중에 언제든지 이러한 경우로 돌아갈 수 있습니다.

테스트 자동화 접근에 대한 나의 순서는 다음과 같습니다

  • 이 테스트
  • 최적화
  • 단계를 안정화 작업

    1. 쓰기 시험 1 & 2는 필수이지만 3 단계를하지 않고 달려 프로젝트 우선 순위. 예를 들어 기존 테스트를 최적화하는 것보다 새로운 테스트를 추가하는 것이 더 중요 할 수 있습니다. 반면에 실행 시간이 매우 길어서 CI 시스템이 제공하는 이점을 낮출 수 있습니다. 그러한 경우 기존 테스트를 최적화하는 것이 더 중요 할 수 있습니다.

      마지막으로 중요한 것은 명시 적 및 암시 적 대기를 혼합하지 않는 것이 좋습니다. 비칩니다 http://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp#explicit-and-implicit-waits

      Combining implicit wait and explicit wait together results in unexpected wait times

      Clarification on the cause of mixing Implicit and Explicit waits of Selenium doc

    관련 문제