2013-10-25 34 views
0

我正在測試一個Web應用程序,它需要每隔5秒刷新其中一個標題元素。通過在組中使用同一應用程序的任何人發佈報價/政策時,該標題元素將更新所有用戶的消息。爲此,我們的開發人員在所有頁面和所有用戶上每5秒連續進行一次AJAX調用。WebDriver等待頁面加載,以便在後臺連續進行AJAX調用

對於通過不同的頁面導航,我最初使用隱式的等待一樣,

DRIVER.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 

之後連續AJAX調用,我不得不使用的webdriver等待明確的功能,並通過頁面導航時找對象的知名度;像,

Wait<WebDriver> wait = new WebDriverWait(DRIVER, 20); 
wait.until(visibilityOfElementLocated(By.id(objID))); 

(請注意visibilityOfElementLocated是另一種功能,還可以處理異常處理。)

我現在的問題是,這種顯式調用代碼更改,當我運行IE 8,但腳本的偉大工程,當我在IE 9上運行它時,它仍然表現相同,無休止地等待頁面加載(或等待該AJAX調用完成)。而且,如果我停止瀏覽器調用(通過按Esc或x鏈接),我的腳本將繼續該頁面,並再次掛起以便下一頁。

任何想法,爲什麼IE 9不工作,因爲IE 8爲頁面加載不工作?有沒有辦法可以調試呢?

PS:我試着更新IEDriverServer,但徒勞無功。此外,這在Chrome和FF瀏覽器上運行良好。

+0

只是更多的更新:我試着用IE10,它也不能工作。 –

+0

不知道這是否有幫助,但我們的asp.net應用程序使用signalR來保持連續的連接。 –

回答

0

我不能說爲什麼IE 8/9的行爲不同。 如果您想等待AJAX​​完成,您可以調用Javascript語句來檢查活動呼叫。 JQuery(我假設你正在使用)有$.active它給你當前正在運行的ajax調用的數量。所以,你可以使用的webdriver作爲JavascriptExecutor和調用這個JS代碼片段:

return typeof $ === 'function' && $.active === 0; 

當結果是真實的存在,沒有進行AJAX,你可以用你的測試繼續進行。

+0

感謝Christoph T的回覆。我的應用程序必須進行連續的AJAX調用(以刷新一些數據),所以我會始終將該值視爲true。順便說一下,我是否需要修改該行以使其正常工作?因爲我把這條線稱爲「我是否總是變得虛假? –

+0

這是我們在測試中使用的聲明。您可以在此頁面上查看它,但我同意它對您的情況沒有用處。所以我明白你的測試需要等待當前正在運行的AJAX調用完成,對吧? – ChristophT

0

看起來像我想到的原因(可惜不是解決方案)。這是IE9的WebDriver的IEDriverServer中的一個已知問題。

請參考以下鏈接: 發行6402:IEDriverServer總是返回document.readyState =完全使用SignalR應用 - 庫

https://code.google.com/p/selenium/issues/detail?id=6402

相關問題