2012-08-24 26 views
15

Tôi đã có một ứng dụng web liên tục thăm dò dữ liệu từ máy chủ bằng cách sử dụng các yêu cầu Ajax. Tôi muốn triển khai thử nghiệm tích hợp cho nó bằng cách sử dụng zombie.js.Cách sử dụng browser.wait() trong tệp zombie.js?

Điều tôi đang cố gắng làm là chờ đến khi vòng lặp thăm dò ý kiến ​​Ajax nhận dữ liệu từ máy chủ. Dữ liệu sẽ được nhận sau 20 giây, vì vậy tôi sử dụng browser.wait(done, callback) để kiểm tra xem dữ liệu có ở đó không và đặt waitFor thành thời gian chờ tối đa là một phút.

Tuy nhiên, browser.wait() luôn trả về gần như ngay lập tức, ngay cả khi số gọi lại done của tôi bị lỗi.

Trong zombie API documentation, tôi đọc phần sau đây về browser.wait():

... nó không thể chờ đợi mãi mãi, đặc biệt là không cho giờ có thể bắn liên tục (ví dụ kiểm tra trạng thái trang, bỏ phiếu dài).

Tôi đoán đó là lý do cho hành vi mà tôi thấy, nhưng tôi thực sự không hiểu điều gì đang xảy ra. Tại sao tôi không thể đợi một phút cho đến khi vòng lặp thăm dò ý kiến ​​của tôi nhận dữ liệu từ máy chủ? Tại sao không thể browser.wait() chờ các bộ hẹn giờ có thể kích hoạt liên tục? Tôi cần làm gì để thực hiện bài kiểm tra của mình?

+0

Bạn có khám phá điều gì mới về điều này không? –

+0

Chỉ cần đảm bảo: bạn đang sử dụng mili giây cho 'waitFor', đúng không? Tôi nói về kinh nghiệm;) Ngoài ra, đừng quên về 'maxWait'. – robertklep

+0

"liên tục thăm dò dữ liệu từ máy chủ" - nếu bạn có quyền kiểm soát này, 'socket.io' sẽ là một thay thế tuyệt vời – jcollum

Trả lời

2

Zombie.js theo mặc định sẽ đợi cho đến khi tất cả các tập lệnh trên trang của bạn đã được tải và thực hiện nếu chúng đang chờ tài liệu sẵn sàng.

Nếu tôi hiểu chính xác bạn, tập lệnh của bạn sẽ không thực thi đến sau 20 giây tài liệu đã sẵn sàng. Trong trường hợp đó, Zombie có chức năng cho phép bạn đánh giá javascript trong ngữ cảnh của trình duyệt, vì vậy bạn có thể khởi động mã ajax của mình nhanh hơn nếu nó ở trên bộ hẹn giờ và bạn không muốn đợi nó.

Nhìn vào browser.evaluate(expr)

Một lựa chọn khác sẽ được chỉ đơn giản là sử dụng một thời gian chờ JavaScript bình thường phải chờ 20 giây, và sau đó nhìn vào DOM cho những thay đổi bạn đang mong đợi.

setTimeout(function(){ 
    browser.document.query("#interestingElement") 
}, 20*1000); 
+0

Chỉ cần lưu ý: nó sẽ thực sự tốt đẹp nếu Zombie thực sự đợi cho đến khi tất cả các tập lệnh trên trang đã tải, nhưng theo như tôi có thể thấy trên http://stackoverflow.com/questions/37482891/php-mink-zombie-handling-hanging-processes-after-a-fatal-exception, đó không nhất thiết phải là trường hợp cho tất cả các trang web, thật không may ... – sdbbs