2011-04-11 8 views
3

私はたくさんの異なるウェブサイトをナビゲートするのにWatinを使用しています。そして、私は偉大な解決策hereを使って自動的にすべてのjavascriptとそのボックスのポップアップでokをクリックします。Watin&IE9 - okボタンをクリック

問題は、この解決策はie6-ie8でもうまく動作しますが、IE9では機能しなくなってしまうことです。

誰にでもIE9を自動クリック/終了する方法に関する提案はありますか?

(私は最新のWatinリリースを使用して、以下のコードだ)

public class something { 

public something() { 
IE browser = new IE("about:blank"); 
addHandlers(browser); 
.. do stuff with browser 

} 

    //Just click ok to everything 
     private void addHandlers(Browser browser) 
     { 
        browser.AddDialogHandler(new WatiN.Core.DialogHandlers.AlertAndConfirmDialogHandler()); 
       browser.AddDialogHandler(new WatiN.Core.DialogHandlers.AlertDialogHandler()); 
       browser.AddDialogHandler(new WatiN.Core.DialogHandlers.CertificateWarningHandler()); 
       browser.AddDialogHandler(new WatiN.Core.DialogHandlers.CloseIEDialogHandler(false)); 
       browser.AddDialogHandler(new WatiN.Core.DialogHandlers.ConfirmDialogHandler()); 
       browser.AddDialogHandler(new WatiN.Core.DialogHandlers.DialogHandlerHelper()); 
       browser.AddDialogHandler(new WatiN.Core.DialogHandlers.FileDownloadHandler("me.htm")); 
       browser.AddDialogHandler(new WatiN.Core.DialogHandlers.FileUploadDialogHandler("me.htm"));    
       browser.AddDialogHandler(new WatiN.Core.DialogHandlers.PrintDialogHandler(WatiN.Core.DialogHandlers.PrintDialogHandler.ButtonsEnum.Cancel)); 
       browser.AddDialogHandler(new WatiN.Core.DialogHandlers.PromptDialogHandler(false)); 
       browser.AddDialogHandler(new WatiN.Core.DialogHandlers.RefreshWarningDialogHandler(false)); 
       browser.AddDialogHandler(new WatiN.Core.DialogHandlers.ReturnDialogHandler()); 
       browser.AddDialogHandler(new WatiN.Core.DialogHandlers.SecurityAlertDialogHandler()); 
       browser.AddDialogHandler(new WatiN.Core.DialogHandlers.SimpleJavaDialogHandler()); 
       browser.AddDialogHandler(new WatiN.Core.DialogHandlers.SecurityAlertDialogHandler()); 
       browser.AddDialogHandler(new WatiN.Core.DialogHandlers.AlertDialogHandler()); 
       browser.AddDialogHandler(new WatiN.Core.DialogHandlers.SimpleJavaDialogHandler()); 
       browser.AddDialogHandler(new OKDialogHandler()); 
      } 

} 


    public class OKDialogHandler : WatiN.Core.DialogHandlers.BaseDialogHandler 
    { 
     public override bool HandleDialog(Window window) 
     { 
      var button = GetOKButton(window); 
      button.Click(); 
      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); 
     } 
    } 
+0

davidのコードを掃除していただきありがとうございます。フォーマットする際に問題が発生しました – chris

+0

WatiNを頻繁に使用し、サポートが安定する前にIE9にアップグレードするのを待っています...ダウングレードすることをおすすめします。 –

答えて

2

WatiN 2.1は最近IE9 issuesの数を扱っているリリースされました。あなたはhttp://watin.org/やNuGetを使用してアップデートからダウンロードできます。

PM>更新パッケージがwatin

+0

ありがとうジム、watin 2.1は、このie9のダイアログをクリックすることができるようだし、起動するのが少し速いようです! – chris

2

私は同じ問題に直面していたと私は回避策を見つけるまでに関係なく、私は何をすべきか、それが働いていないいませんでしたそれは時間がかかりますが、私のために働きます。

WaitUntilExists()のデフォルトの時間は30秒です。IE9で使用する場合、次のように長時間制限を設けてください。

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

確かに時間がかかりますが動作します。

関連する問題