2011-08-18 2 views
5

셀레늄을 사용하여 Dojo를 사용하는 웹 앱을 테스트하고 자바 스크립트를 사용하여 특정 요소를 표시합니다. 페이지 조작을 시도하기 전에 모든 요소가 사라질 때까지 기다리고 싶지만 문제가 있습니다.활성 자바 스크립트 시간 초과를 계산하는 방법은 무엇입니까?

dojo inFlight 변수가 0이 될 때까지 기다렸다가 모든 아약스가 완료되었다고합니다. 나중에 시간 제한에 따라 작업을 수행하기 때문에 항상 작동하는 것은 아닙니다.

나는 또한 반복적으로 요소를 찾으려고했지만, 너무 좋지는 않습니다. 아마도 나중에이 필드를 어떤 방법으로 사용할 일부 자바 스크립트가있을 것입니다.

그래서 기본적으로 (적어도 파이어 폭스에서) setTimeout (또는 setInterval)을 실행하기 위해 기다리는 자바 스크립트를 쿼리하는 방법을 원합니다. 내 자신의 함수를 통해 내장 된 호출을 래핑하는 방법에 대해서도 대처할 수 있습니다. 이것을 추적하는 것.

감사합니다.

답변

5

JavaScript의 모든 기능을 바꿀 수 있습니다.

window.originalSetTimeout = window.setTimeout; 

window.setTimeout = function(func, delay, params) { 
    window.timeoutCounter++; 
    window.originalSetTimeout(window.timeoutCallback, delay, [func, params]); 
} 

window.timeoutCallback = function(funcAndParams) { 
    window.timeoutCounter--; 
    func = funcAndParams[0]; 
    params = funcAndParams[1]; 
    func(params); 
} 

다음 : 답장을 보내

selenium.waitForCondition("window.timeoutCounter == 0"); 
1

setTimeoutsetInterval으로 호출 할 때마다 타이머 ID가 반환됩니다. 배열이 제한 시간에 호출하고 함수 내부

  • 에서 그 타이머 ID, 팝 배열 타이머 ID 오프 저장

    1. . 왜냐하면 타이머가 끝나자 마자 배열에서 해당 ID를 제거해야하기 때문입니다.
    2. 언제든지 번호를 확인하고 싶습니다. 활성 타이머의, 그냥 그 배열의 길이를 쿼리하십시오.
  • +0

    안녕하세요, 감사 같은 것을 생각해 보자. 우리는 setTimeout 또는 setInterval을 직접 호출하지 않습니다. UI 개발자가 사용하는 Dojo 라이브러리에 의해 호출됩니다. 우리는 셀렌으로 애플리케이션을 테스트하려고 노력하고 있으므로 페이지에서 자바 스크립트를 실행할 수 있지만 테스트중인 코드의 작동 방식을 쉽게 방해 할 수는 없습니다. 아마도 우리를 위해 이것을 추적 할 수있는 파이어 폭스 플러그인이 있으며 시간 초과 메커니즘에 내장 된 오버레이를 어떻게 든 오버레이 할 수 있습니까? –

    관련 문제