2009-05-19 8 views
15

Usando Watin, estoy tratando de manejar un cuadro de diálogo de confirmación y decirle a watin que presione "OK". Esto está razonablemente bien documentado en internet: usted usa un método ConfirmDialogHandler y UseDialogOnce ... Excepto que no funciona para mí. Me sale el siguiente error:Watin - Manejo Confirmar cuadros de diálogo con ConfirmDialogHandler

WatiN.Core.Exceptions.WatiNException: Dialog not available within 5 seconds

estoy usando la versión beta Watin 2,0 atm, pero yo estaba previamente usando una versión anterior de 1.X que tenía el mismo problema. Probado en una máquina de correr colegas Vista de 64 bits, estoy corriendo 64 bits de Windows 7.

El código es el siguiente:

 using (IE ie = new IE("http://localhost/TestApp/TestConfirmPage.asp")) 
     { 
      var approveConfirmDialog = new ConfirmDialogHandler(); 

      using (new UseDialogOnce(ie.DialogWatcher, approveConfirmDialog)) 
      { 
       ie.Button(Find.ByName("btn")).ClickNoWait(); 
       approveConfirmDialog.WaitUntilExists(5); 
       approveConfirmDialog.OKButton.Click(); 
      } 
      ie.WaitForComplete(); 
     } 

La página ASP es muy simple, consiste en un botón que las fuerzas una confirmación, así:

<input type="button" name="btn" id="btn" value="Click me" onclick="ConfirmApp()" /> 

Y ConfirmApp ha sido simplificada para las pruebas de modo que ahora todo lo que contiene es:

bOK = confirm("You clicked a popup. Did you mean to?"); 
return bOK; 
+0

relacionadas: http://stackoverflow.com/questions/5626538/watin-ie9-cant-click-ok-buttons/9769242#9769242 –

Respuesta

11

El código se ve bien para mí, y creo que debería funcionar. Lo único que creo que hice de manera diferente fue poner Wait for Complete adentro usando el bloque de diálogo. No sé por qué pero antes de hacerlo también tengo algunos problemas, a veces funciona a veces no. Y no uso límite de tiempo en Esperar hasta que exista. Pero probablemente ya has intentado eso.

Por ejemplo:

using (new UseDialogOnce(ie.DialogWatcher, approveConfirmDialog)) 
     { 
      ie.Button(Find.ByName("btn")).ClickNoWait(); 
      approveConfirmDialog.WaitUntilExists(); 
      approveConfirmDialog.OKButton.Click(); 
      ie.WaitForComplete(); 
     } 
+0

Usando una combinación de cambios de código como este y una actualización de los archivos DLL ordenados. –

1

que estaba enfrentando el mismo problema y no importa lo que hago que no estaba funcionando hasta que encontré una solución que toman tiempo, pero funciona para mí.

El tiempo predeterminado para que transcurra WaitUntilExists()es 30 segundos así que cuando lo use en IE9 proporcione un límite de tiempo extendido como el siguiente.

handler.WaitUntilExists(40); // or whatever time suits you above 30

Ciertamente, toma tiempo, pero funciona.

2

Tuve el mismo problema e intenté muchas cosas, pero simplemente pasé por alto una parte que estaba llamando .Haga clic en() y luego simplemente lo cambié a .ClickNoWait() y cosas ordenadas. Espero que esto ayude

0

Acabo de pasar un par de horas con variaciones en la solución del observador de diálogo. Nada funcionó para mí en IE9.

Terminé con un trazador de líneas que funciona para mí, espero que ayude a alguien más! Este enfoque evita por completo tratar de lidiar con el diálogo mediante el uso de teclas de usuario en su lugar.

  • Para OK. Siga todos los pasos que conducen al botón ClickNoWait, luego:

SendKeys.SendWait ("{ENTER}");

  • Para CANCELAR. Siga todos los pasos previos al elemento ClickNoWait, luego: SendKeys.SendWait ("{TAB}"); SendKeys.SendWait ("{ENTER}");

nb: using System.Windows.Forms

Cuestiones relacionadas