2009-12-30 46 views
6

WatiN我如何等待回传完成。WatiN如何等待回传完成

例如:

// Postback response modifies update panel elsewhere on page 
browser.Text("id").TypeText("asd"); 

// WatiN doesn't wait until postback is completed (what code should I replace it with?). 
browser.WaitUntilComplete(); 

回答

6

WaitUntilComplete不能识别ajax调用。看到这篇文章(上WaitForAsyncPostBackToComplete搜索)如何注入一些代码,使这项工作还有:WatiN, Ajax and some Extension Methods

HTH, 吉荣

+0

谢谢。这正是我后来发现的。奇怪的是,我在搜索的前3天没有在这篇文章中找到 – 2010-01-02 17:04:22

11

您可以检查是否IE忙,而不是完整的。

while (((SHDocVw.InternetExplorerClass)(_ie.InternetExplorer)).Busy) 
     { 
      System.Threading.Thread.Sleep(2000); 
     } 
+0

这是可悲的,我不能标记两个答案是正确的,但我会记住你的绝招,以及为将来使用 – 2010-01-02 17:05:28

+1

+1我有点怀疑,但这完美地与Ajax一起工作!谢谢你的提示! :-) – 2012-10-18 19:27:18

1

如前所述WaitForComplete是罚款加载页面,但不工作Ajax调用。

下面是一个非常简单的解决方案,适用于我希望特定元素出现的情况,可能...最终。它只是循环,直到elementID存在一个页面上,或者超时20秒后:

DateTime _startWait = DateTime.Now; 
while (_startWait.AddMilliseconds(20000) > DateTime.Now && !WatiNbrowser.Elements.Exists(elementID)) 
        { 
         System.Threading.Thread.Sleep(200); 
         Application.DoEvents(); 
        } 
+0

既然你是在一个STA线程中,你为什么要调用'Application.DoEvents()'? – Odys 2012-10-29 11:23:35

+0

确实这是多余的。当我第一次启动C#并且不知道更好时,这是一些来自后面的旧代码。 – 2012-11-05 04:40:36