2009-12-30 6 views
6

in WatiN wie kann ich warten, bis Postback abgeschlossen ist.In WatiN, wie warten, bis Postback abgeschlossen ist

Zum Beispiel:

// 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(); 

Antwort

6

WaitUntilComplete erkennt keine AJAX-Aufrufe. Lesen Sie diesen Artikel (Suche auf WaitForAsyncPostBackToComplete), wie einige Code zu injizieren, als auch, dass die Arbeit zu machen: WatiN, Ajax and some Extension Methods

HTH, Jeroen

+0

Danke. Genau das, was ich später gefunden habe. Es ist komisch, wie ich diesen Artikel in den ersten 3 Tagen der Suche nicht gefunden habe –

11

Sie könnten überprüfen, ob IE beschäftigt ist und nicht vollständig.

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

Es ist traurig, dass ich nicht zwei Antworten als richtig markieren können, aber ich werde auch für die zukünftige Verwendung im Auge Ihren Trick halten –

+1

+1 Ich war ein bisschen skeptisch, aber das funktioniert einwandfrei mit Ajax! Danke für diesen Tipp! :-) –

1

Wie erwähnt WaitForComplete ist in Ordnung für eine Lade Seite, aber funktioniert nicht für Ajax ruft an.

Hier ist eine sehr einfache Lösung, die gut für meine Situation funktioniert, wo ich erwarte, dass ein bestimmtes Element erscheint ... vielleicht ... irgendwann. Es Schleifen einfach bis elementID auf einer Seite vorhanden ist, oder eine Zeitüberschreitung nach 20 Sekunden:

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

Da Sie in einem STA-Thread sind, warum rufen Sie 'Application.DoEvents()'? – Odys

+0

In der Tat ist das überflüssig. Dies war ein alter Code von damals, als ich C# startete und es nicht besser wusste. –