2011-08-18 33 views
5

Tôi đang sử dụng Selenium để kiểm tra một ứng dụng web có sử dụng Dojo và nó sử dụng tập lệnh java để hiển thị các phần tử nhất định. Tôi muốn chờ đợi cho đến khi tất cả các yếu tố được giải thích trước khi tôi cố gắng thao tác trang, tuy nhiên tôi đang gặp rắc rối.Cách đếm thời gian chờ javascript hoạt động?

Tôi đã bắt đầu bằng cách chờ cho biến dojo inFlight bằng 0, điều này nói rằng tất cả ajax đã kết thúc. Điều này không phải lúc nào cũng hoạt động bởi vì dường như có một số điều sau đó hết thời gian chờ.

Tôi cũng đã thử liên tục tìm kiếm phần tử, nhưng điều này không quá đẹp, vì có lẽ có một số javascript sau này sẽ sử dụng trường này theo một cách nào đó. Vì vậy, về cơ bản tôi muốn có một phương pháp (trong firefox ít nhất) để truy vấn javascript chờ đợi để chạy trên một setTimeout (hoặc setInterval) tôi thậm chí có thể đối phó với một cách gói các cuộc gọi được xây dựng trong thông qua một chức năng của riêng tôi để theo dõi điều này.

Bất kỳ suy nghĩ hoặc đề xuất nào được đánh giá cao!

Trả lời

5

Mọi chức năng trong JavaScript đều có thể được thay thế. Hãy xem xét một cái gì đó như thế này:

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); 
} 

Sau đó:

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

Bất cứ khi nào bạn gọi setTimeout của setInterval - id bộ hẹn giờ được trả lại.

  1. Save rằng timer id trong một mảng
  2. Bên trong chức năng mà bạn đang gọi điện thoại về thời gian chờ, pop mà timer id tắt mảng. Vì chúng tôi phải xóa id đó khỏi mảng ngay sau khi bộ hẹn giờ kết thúc.
  3. Bất kỳ lúc nào bạn muốn kiểm tra không. của bộ đếm thời gian hoạt động, chỉ cần truy vấn độ dài của mảng đó.
+0

Hi, nhờ trả lời của bạn. Chúng tôi không gọi trực tiếp setTimeout hoặc setInterval. Chúng đang được gọi bởi thư viện Dojo, được sử dụng bởi các nhà phát triển UI của chúng tôi. Chúng tôi đang cố gắng thử nghiệm ứng dụng với selen, vì vậy chúng tôi có quyền truy cập để chạy javascript trong trang, nhưng chúng tôi không thể dễ dàng can thiệp vào cách mã mà chúng tôi đang thử nghiệm hoạt động. Có lẽ có một plugin firefox có thể theo dõi điều này cho chúng tôi và bằng cách nào đó che phủ cơ chế thời gian chờ được xây dựng? –

Các vấn đề liên quan