2010-08-11 8 views
9

CiaoC# WatiN - Aggiungere un AlertDialogHandler a fare clic sul pulsante OK in ogni finestra di dialogo Avviso

Coloro che hanno utilizzato WatiN probabilmente utilizzato anche DialogHandlers.

Beh qualcuno può insegnarmi come posso assegnare un DialogHandler che gestirà qualsiasi finestra di avviso window.alert(), di una specifica istanza di IE sotto controllo WatiN.

DialogHandler deve solo fare clic sul pulsante OK per la finestra di dialogo di avviso molto, in tal caso penso che abbiamo bisogno di un AlertDialogHandler che fondamentalmente deve solo fare clic sul pulsante OK.

AlertDialogHandler.OKButton.Click() 

ho cercare sul web e ho trovato alcuni esempi .. ma funzionano per un piccolo periodo di tempo o il tempo specificato, ho bisogno di uno che funziona sempre, fino a quando ho scelto di fermarlo facendo clic su un pulsante.

Questo mi ha infastidito la testa per ore, ogni aiuto è apprezzato. Grazie.

Nota: A volte la finestra di avviso ha due pulsanti. Ecco perché ho davvero bisogno di fare clic sul pulsante OK, non solo Chiudi la finestra di dialogo.

risposta

16

Crea classe:

public class OKDialogHandler : BaseDialogHandler 
{ 
    public override bool HandleDialog(Window window) 
    { 
     var button = GetOKButton(window); 
     if (button != null) 
     { 
      button.Click(); 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 

    public override bool CanHandleDialog(Window window) 
    { 
     return GetOKButton(window) != null; 
    } 

    private WinButton GetOKButton(Window window) 
    { 
     var windowButton = new WindowsEnumerator().GetChildWindows(window.Hwnd, w => w.ClassName == "Button" && new WinButton(w.Hwnd).Title == "OK").FirstOrDefault(); 
     if (windowButton == null) 
      return null; 
     else 
      return new WinButton(windowButton.Hwnd); 
    } 
} 

Dopo aver creato un'istanza di IE, fissare dialogo handler ad esso:

ie.AddDialogHandler(new OKDialogHandler()); 

Questa finestra di gestore si occuperà di tutte le finestre, che contiene un pulsante con "OK" caption , cliccando su quel pulsante.

+0

Pulito e semplice. Funziona come un orologio. Grazie. –

+0

@prostynick -posso so quale classe appartiene anche a WindowsEnumerator? Sembra essere il punto cruciale della tua classe OKDialogHandler.- Doh! L'ho trovato in BaseDialogHandler. Grazie! – voidmain

+0

No, ho sbagliato. Non ho trovato WindowsEnumerator in BaseDialogHandler, ma piuttosto in WatiN.Core.Native.InternetExplorer. – voidmain

Problemi correlati