2013-08-27 53 views
0

我有兩個問題與相同的問題有關... Q1)我正在使用WatiN(3.5)進行網站自動化。 這種情況是,我想獲得一個div標記,當結果頁面完全加載,但WatiN不會等待該頁面被campletely加載,並試圖obatin div,結果得到div爲空。這個div由AJAX填充。這是我用來避免該錯誤但不起作用的代碼。等待頁面使用WatiN完全加載

while (resultDiv == null) 
      { 
       browser.Div("ui-tabs-1").WaitUntilExists(); 
       resultDiv = browser.Div("ui-tabs-1"); 
      } 

所以,我怎麼能等待一個頁面,使用華廷被完全加載?

Q2)我發現上述問題here一個解決方案,但我停留在一個點作爲我無法找到這些接口即IElementIBrowser庫的一個引用。這些接口被用於擴展方法。 我也問過那篇文章的作者並等待他的回覆。 我正在使用VS 2010中的WatiN 2.5和.Net framework 3.5進行此操作。

回答

3

我在使用Ajax的網站上遇到了watin類似的問題。 這是解決方法。

//單擊非Ajax網站上加載結果的鏈接/選項卡/按鈕。 我們在這裏有一個功能,browser.WaitForComplete()但它只在頁面處於加載狀態時才起作用。但在瀏覽器窗口的一部分Ajax被更新的情況下。所以瀏覽器沒有加載狀態。

因此,針對此問題的一種解決方案是 使用Thread.Sleep(10000);這個時間可以根據網站加載所需div的正常時間而變化。

+1

你當然也可以使用WaitUntilContainsText()。 –

1

Thread.Sleep 可以使用,但是對於任何等待加載某個東西的概念證明以外的其他任何事情,都應該避免使用Thread.Sleep。睡眠會增加不必要的空閒時間,如果您在最長的時間內睡眠,並在等待較少的時間時發生誤報。

如果您正在測試ASP.NET Ajax站點,請參閱Jeroen的鏈接:In WatiN how to wait until postback is complete - WaitForAsyncPostbackToComplete。我將這個想法用於一些方法和屬性,以擺脫長時間睡眠呼叫的代碼。測試運行得更快,結果更加可靠。

如果特定的JS調用將不起作用,因爲您使用的是不同的客戶端框架,在循環中使用基本輪詢概念和更短的睡眠時間會比長時間休眠更好。

相關問題