2012-10-19 35 views
1

我想編寫一個測試用例(使用Selenium,但不是此問題的要點)來驗證我的Web應用程序在某些點上沒有腳本錯誤\警告或未引發異常及時(比如初始化一個主要的圖書館之後)。以編程方式檢索JavaScript錯誤的頁數

這些信息很容易在大多數瀏覽器的調試控制檯中看到。是否有可能執行JavaScript語句以編程方式獲取此信息?

沒關係,如果每個瀏覽器都不一樣,我可以處理。

+0

考慮JavaScript解釋器不再解釋,當它遇到一個錯誤,我不認爲這是可能的。 – jbabey

+0

這根本不是真的。當在javascript中發生運行時錯誤時,當前正在執行的函數將在那一點返回未定義的結果 - 這可能會導致立即出現功能錯誤,或者更隱蔽地毒化稍後的代碼。在IE 6 \ 7 \ 8上,它可能會向用戶顯示一個對話框,具體取決於瀏覽器選項。在Chorme,Safari和其他優秀的瀏覽器中,它是一個更安靜的過程。無論如何,這是你可能想要測試的東西。 – Eric

回答

2

至今沒有讀到了你的問題(據我理解你的問題)here

的想法是以下幾點: 我發現,但是,我第一次加載頁面時經常會出現JavaScript錯誤(因爲我正在處理JS並引入了錯誤),所以我一直在尋找一種快速方法將斷言添加到我的測試中,以檢查是否發生了任何JS錯誤。經過谷歌搜索之後,我得出結論認爲,Selenium沒有內置任何內容來支持這一點,但是可以使用一些黑客來實現它。我將在這裏描述其中的一個。爲了記錄,讓我再說一遍,這很不好聽。我很樂意聽到其他人可能有更好的解決方案。

<script type="text/javascript"> 
    window.onerror=function(msg){ 
     $("body").attr("JSError",msg); 
    } 
</script> 

這將導致所謂JSError與對應的JavaScript錯誤消息的值的屬性: 我只是通過截獲window.onerror事件腳本添加到我的網頁,將捕獲任何JS錯誤如果發生JavaScript錯誤,則將其添加到我的文檔的主體標記中。請注意,我使用jQuery來做到這一點,所以如果jQuery無法加載,這個特定的例子將不起作用。然後,在我的Selenium測試中,我只使用命令assertElementNotPresent,目標爲//body[@JSError]。現在,如果頁面上出現任何JavaScript錯誤,我的測試將失敗,我會知道我必須先解決它們。如果出於某種奇怪的原因,我想檢查特定的JavaScript錯誤,我可以使用assertElementPresent命令,其目標爲//body[@JSError='the error message']

希望這新意幫助你:)

+0

您可以通過指向此鏈接回答 - http://www.silverwareconsulting.com/index.cfm/2010/6/7/Checking-for-JavaScript-Errors-with-Selenium – Amey

+0

對此事件不知情。謝謝,這是我正在尋找的答案。 – Eric

0
try { 
    //code 
} catch(exception) { 
    //send ajax request: exception.message, exception.stack, etc. 
} 

更多信息 - MDN Documentation