我正在編寫一個自動化測試程序,它應該測試任何網站。如何得知沒有AJAX調用正在等待加載?
我想單擊文檔的某個元素,但在此之前我想驗證沒有任何AJAX調用正在運行。
我只會有文檔,而不是任何AJAX調用URL或類似的東西。
有沒有什麼辦法可以在文檔上驗證沒有AJAX請求正在執行。
我該怎麼做?
我正在編寫一個自動化測試程序,它應該測試任何網站。如何得知沒有AJAX調用正在等待加載?
我想單擊文檔的某個元素,但在此之前我想驗證沒有任何AJAX調用正在運行。
我只會有文檔,而不是任何AJAX調用URL或類似的東西。
有沒有什麼辦法可以在文檔上驗證沒有AJAX請求正在執行。
我該怎麼做?
簡單的回答:你不能。 HTTP是無狀態的,瀏覽器無法知道請求是否已發送,以及我們是否仍在等待回覆。
唯一可以知道的應用程序本身就是應用程序邏輯。當您等待AJAX回覆,添加到列表中,增加計數器時,設置一個變量...然後您可以「觀察」變量。
恐怕我不知道一個優雅的方式來實現這一點。在方法中封裝所有AJAX調用並使用該方法可能會起作用 - 您可以在上線時禁用測試代碼。
也許你不需要JavaScript?所以你可以使用這種類型的代碼;
javascript:void(d=document);if(frames.length){alert('Script doesnt work in frame');}else
{while((el=d.getElementsByTagName('script')).length
{el[0].parentNode.removeChild(el[0]);};onerror=function(){};d.close();}
jQuery有幾個AJAX event handlers。如果在ajaxStart
上將ajaxIsExecuting
設置爲true,並在ajaxStop
上將其設置爲false,則應該瞭解AJAX是否正在執行。
您可以使用以下技術:
var loadingarray=[];
function GetCommand(id, sid) {
if (loadingarray[id]) {return false;}
loadingarray[id] = true;
getCommandResponse = $.ajax({
//send id to server
....
....
});
}
function AjaxFinishedGet(xml, status) {
//retrieve id from server in xml
loadingarray[id] = false;
...
...
}
,然後你可以簡單的檢查loadingarray具有真正的價值。如果有;一些使用id運行的ajax調用。如果它不知道運行中沒有任何ajax進程。
修改原生XMLHttpRequest方法。繁榮,完成;) –