2013-07-09 85 views
12

我想知道是否有人可以在這些嘗試中進行擴展,或者有任何其他想法可以使用WebDriver在Firefox,Chrome,Internet Explorer和Safari中捕獲JS錯誤。在Selenium WebDriver中捕獲JavaScript錯誤 - 與瀏覽器無關

這裏是一直到目前爲止已經試過:
嘗試 - 問題:

JSErrorCollector.jar - 做工精細,但它是一個僅限Firefox瀏覽器的解決方案。

將JS注入頁面源代碼 - 我使用WebDriver將window.onerror代碼注入到頁面的源代碼中,但由於注入太遲而錯過任何初始錯誤。

BrowserMob - 我可以攔截HTTP響應,並計劃注入window.onerror代碼爲響應體,但筆者一直沒有實現getBody()方法還沒有,所以只有頭可以被修改,我所知道的。所有響應的身體始終爲空。 (我是在網頁上,筆者談到實施getBody(),但還沒有發生,我不能找了一遍)

提琴手 - JS將正確注入,但提琴手是僅適用於Windows的Safari所以不會工作。

父/子窗口 - 我使用javascript打開並存儲對測試頁面窗口的引用。 window.onerror code包含在父窗口中,因此它不會錯過子窗口中的啓動錯誤。我不能在Firefox和Chome中有所作爲。我已經問了一個關於它的問題here

硒RC - 我還沒有嘗試過,因爲我所有的測試使用webdriver的,但我知道它有某種類似captureNetworkTraffic()方法,但我不認爲它可以在webdriver的使用。

IE錯誤彈出框 - 我打算使用Firefox/Chrome的父/子解決方案,然後查找IE錯誤彈出窗口。此設置被選中後顯示。彈出窗口是一個本地窗口窗口(我認爲),所以我不能使用硒來訪問它。

閱讀瀏覽器控制檯 - 我找不到在所有瀏覽器中都這樣做的方法。在Chrome中,我找到了一種將控制檯日誌保存到文件然後讀取該文件的方法。這是我得到的。

我想要一個類似於BrowserMob的解決方案,因爲它好像是一個跨瀏覽器解決方案。是否還有其他代理可以加入測試並攔截響應?如果實施getBody()方法,情況會非常好。我也喜歡父/子解決方案,因爲它也像一個簡單的跨瀏覽器解決方案,但它不適用於IE(parent/child question again)。

感謝您的任何幫助。

+1

據我所知,您列出了當前可用的所有解決方案(2013年7月,Selenium 2.33.0)。 [請參閱官方的Selenium錯誤以獲取更多討論。](http://code.google.com/p/selenium/issues/detail?id=148)在有任何官方API之前,您必須使用這些API解決方案,或者爲您需要支持的每個瀏覽器編寫自己的瀏覽器插件。 –

+0

感謝您的鏈接。 – Ryan

+2

你意識到BrowserMob代理是[開源](https://github.com/lightbody/browsermob-proxy),對不對?什麼阻止你實現缺失的功能並提交拉取請求? – JimEvans

回答

1

我不知道有什麼方法可以通過測試框架直接捕獲Javascript代碼錯誤。如果我猜測,我會使用PhantomJS。或者,也許像MITM Proxy這樣的工作?

作爲一個旁註,如果您使用單獨的節點運行Selenium2 Grid Hub,則可以將Java選項傳遞給此節點的JVM,以允許通過Fiddler的代理工作。 Fiddler偵聽(默認情況下)端口8888.使用此方法,您可以觀看數據包。

:: batch script: Set JAVA_OPTS java options to JVM 
SET "JAVA_OPTS=-Dwebdriver.chrome.^ 
driver=%CHROMEDRIVER%" 
IF "%PROXY_TO_FIDDLER%"=="true" SET "JAVA_OPTS=%JAVA_OPTS% -DproxySet=true^ 
-Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=8888" 

我創建了scripts you can use to start your grid and node here。在我看來,你可以使用這種方法來與端口8080上的BrowserMob代理進行通信?我沒有嘗試過。

+0

我現在使用Fiddler來觀看數據包,但我沒有網格設置。我會研究你的代碼。感謝您的答案/代碼。 – Ryan

+0

我猜想,頁面源不會在網格中心和節點之間傳遞。遇到Javascript錯誤的節點實例上的每個Web瀏覽器會話都位於其自己的沙箱中。你的使用JQuery注入的想法似乎是我做到這一點的唯一方法,但我知道你說它沒有及時發現錯誤。我理論上,但也許你可以加載你的頁面在一個iFrame包裝測試頁框架,預加載jquery和控制/監視你的頁面加載其iframe?在這種情況下,您的測試驅動程序必須執行switchTo才能進入框架。 – djangofan

相關問題