2009-12-30 12 views
6

in WatiN come posso aspettare fino al completamento del postback.In WatiN come aspettare che il postback sia completo

Ad esempio:

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

risposta

6

WaitUntilComplete non riconosce le chiamate Ajax. Si veda questo articolo (ricerca su WaitForAsyncPostBackToComplete) su come iniettare un po 'di codice per fare quel lavoro così: WatiN, Ajax and some Extension Methods

HTH, Jeroen

+0

Grazie. Questo è esattamente quello che ho trovato più tardi. È strano come non sia venuto a conoscenza di questo articolo nei primi 3 giorni di ricerca –

11

Si potrebbe verificare se IE è occupato piuttosto che completa.

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

E' triste che non riesco a segnare due risposte come corrette, ma io non mancherà di tenere a mente il vostro trick così per un utilizzo futuro –

+1

+1 Ero un po 'scettico, ma funziona perfettamente con l'Ajax! Grazie per il consiglio! :-) –

1

Come accennato WaitForComplete va bene per un caricamento della pagina, ma non funziona per Ajax chiama.

Ecco una soluzione molto semplice che funziona bene per la mia situazione in cui mi aspetto che un elemento specifico appaia ... forse ... alla fine. E 'loop semplicemente fino elementID esiste in una pagina, o in timeout dopo 20 secondi:

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

Dato che ci si trova in una discussione STA, perché si chiama 'Application.DoEvents()'? – Odys

+0

In effetti è ridondante. Questo era un vecchio codice da quando ho iniziato C# e non lo sapevo. –

Problemi correlati