2009-12-30 16 views

Respuesta

6

WaitUntilComplete no reconoce las llamadas ajax. Ver este artículo (búsqueda en WaitForAsyncPostBackToComplete) sobre la manera de inyectar algo de código para hacer que el trabajo así: WatiN, Ajax and some Extension Methods

HTH, Jeroen

+0

Gracias. Eso exactamente lo que encontré más tarde. Es extraño cómo no encontré este artículo en los primeros 3 días de búsqueda –

11

se puede comprobar si el IE está ocupado en lugar de completa.

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

Es triste que no puedo marcar dos respuestas sean más exactas, pero voy a tener en cuenta su truco, así como para su uso futuro –

+1

+1 ¡Estaba un poco escéptico, pero esto funciona perfectamente con Ajax! Gracias por este consejo! :-) –

1

Como se mencionó WaitForComplete está bien para una carga de la página, pero no funciona para Ajax llama.

Aquí hay una solución muy simple que funciona bien para mi situación en la que espero que aparezca un elemento específico ... quizás ... con el tiempo. Es simplemente un bucle hasta que existe elementID en una página, o el tiempo de espera después de 20 segundos:

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

Dado que estás en un subproceso STA, ¿por qué llamas 'Application.DoEvents()'? – Odys

+0

De hecho, eso es redundante. Este fue un código antiguo de cuando comencé C# y no lo sabía. –

Cuestiones relacionadas