2016-08-10 15 views
8

Tôi đã cố gắng tìm hiểu điều này bằng cách sử dụng một loạt các console.log và vẫn không thể tìm ra lý do tại sao thời gian tải này quá dài.Zombie.js pressButton Long Callback Delay

Vì vậy, tôi có mã sau trong số beforeEach trong tệp thử nghiệm đơn vị Mocha của tôi.

browser.fill('email', '[email protected]'); 
browser.fill('password', 'testtest'); 
browser.pressButton('Login').then(function() { 
    console.log("#100 - "+ new Date().getTime()); 
    done(); 
}); 

Nhấn nút trong trường hợp này sẽ có một vài chuyển hướng cuối cùng sẽ hiển thị trang tổng quan. Ở dưới cùng của tập tin html tôi có đoạn mã sau.

<script> 
    $(document).ready(function() { 
     console.log("#200 - "+ new Date().getTime()); 
    }); 
</script> 

Vì vậy, sau khi chạy các bài kiểm tra nếu tôi lấy giá trị sau trừ giá trị sau #200 nó luôn luôn về 5000-6000. Vì #200 luôn được in trước bằng 5-6 giây.

Tôi không hiểu tại sao sau khi tải trang phải mất thêm 5-6 giây để Zombie.js gọi hàm gọi lại đó.

Zombie.js có chờ đợi hoặc trì hoãn mà tôi bị thiếu sau khi tải trang không? Điều gì khác có thể gây ra sự chậm trễ 5-6 giây này giữa tải trang và Zombie.js gọi hàm gọi lại đó?

EDIT Tôi hiện có cùng sự cố này nhưng với mức 50000ms. Và điều đó thực sự tăng lên nhanh chóng trong tất cả các bài kiểm tra của tôi. Tôi vẫn không thể hiểu tại sao điều này lại xảy ra.

EDIT 2

Nếu tôi thêm browser.debug() để thử nghiệm của tôi nó in ra sau khi kết thúc rất. Nó cũng in rất nhiều thứ khác nhưng điều đó xảy ra tổng thể khá nhanh chóng. Tôi nghĩ rằng sau đây có thể là vấn đề. Chỉ cần không chắc chắn lý do tại sao nó làm điều đó hoặc làm thế nào để sửa chữa nó.

zombie Fired setInterval every 5000ms +11ms 
zombie Fired setInterval every 5000ms +5s 
zombie Fired setInterval every 5000ms +5s 
zombie Fired setInterval every 5000ms +5s 
zombie Fired setInterval every 5000ms +5s 
zombie Fired setInterval every 5000ms +5s 
zombie Fired setInterval every 5000ms +5s 
zombie Fired setInterval every 5000ms +5s 
zombie Fired setInterval every 5000ms +5s 
zombie Fired setInterval every 5000ms +5s 
zombie Fired setInterval every 5000ms +5s 

Điều gì gây ra tất cả các zombie Fired setInterval every 5000ms và cách khắc phục nó để làm cho nó không mất 55000ms +?

EDIT 3

Tôi cũng đã thêm đoạn mã sau vào đầu của bài kiểm tra đơn vị.

browser.addListener("setInterval",function (a,b) { 
    console.log("a: "+a); 
    console.log("b: "+b); 
}); 

Sau khi in mỗi zombie Fired setInterval every 5000ms +5s nó cũng in sau vì người nghe đó.

a: function(){var b,c,d;if(b=window.location.href,b!==h){try{d=JSON.stringify({action:"ping",sid:a.utils.getSessionID(),muid:a.utils.getMerchantID(),referrer:h,url:b,title:document.title}),e.contentWindow.postMessage(d,"*")}catch(f){c=f}return h=b}} 
b: 5000 

ab đều giống nhau sau mỗi một trong những 11 zombie Fired setInterval every 5000ms. Nó không thay đổi chút nào giữa 11 lần đó.

Tôi nghĩ rằng chức năng đó sẽ giúp đỡ trong một cách nào đó nhưng tôi vẫn không hiểu tại sao điều này đang xảy ra hoặc làm thế nào để sửa chữa nó cả.

Trả lời

1

Zombie tải tất cả tài nguyên và xử lý tất cả các sự kiện trước khi kích hoạt gọi lại.Thay vì sử dụng , nhấn nút, hãy thử gửi biểu mẫu trực tiếp và sử dụng chờ với cuộc gọi lại người gọi lại sẽ được gọi sau mỗi sự kiện. Điều này sẽ cho bạn thấy những gì đang gây ra sự chậm trễ:

browser.document.forms[0].submit(); 
browser.wait(function(){ 
    //called after each event 
}, function() { 
    //all events processed 
}); 

Từ các tài liệu API:

browser.wait (callback)

browser.wait (terminator, callback)

Xử lý tất cả các sự kiện trong hàng đợi và gọi lại khi hoàn tất.

Bạn có thể sử dụng biểu mẫu giây thứ hai để chuyển quyền kiểm soát trước khi xử lý tất cả các sự kiện . Các terminator có thể là một số, trong trường hợp đó nhiều sự kiện được xử lý. Nó có thể là một hàm , được gọi sau mỗi sự kiện; Xử lý dừng khi hàm trả về giá trị false.

+0

Xin lỗi vì trả lời chậm. Không thấy điều này cho đến bây giờ. Làm thế nào chính xác tôi sẽ phát hiện những thay đổi sau mỗi sự kiện? Tôi đã chạy 'console.log (browser.html());' nếu chênh lệch MS giữa mỗi sự kiện là> một số tiền nhất định. Nhưng tôi không thể tìm thấy bất kỳ thay đổi nào giữa những thứ đó. Vì vậy, làm thế nào tôi sẽ tìm ra những gì đang dùng quá lâu giữa các sự kiện? Tôi hiện đang có bài kiểm tra đơn vị này đang diễn ra tốt hơn một phút và tôi không thể hiểu tại sao. Trong quá khứ, mất khoảng 7 giây. Bây giờ nó chiếm hơn 8x đó. Và tôi không thể tìm thấy bất kỳ thay đổi nào trong mã của tôi có thể gây ra điều đó. –