2

javascriptアラートウィンドウの「OK」ボタンをクリックしようとしています。ただし、このメソッドは、オブジェクトのインスタンスに設定されていないオブジェクト参照をAddDialogHandlerスローします。私は何が間違っているのですか?

// Class
IE browser;

button_click()
{
     var thread = new Thread(() =>
     {
        WatiN.Core.Settings.AutoStartDialogWatcher = false;
        browser = new IE(webBrowser1.ActiveXInstance);

        ReturnDialogHandler myHandler = new ReturnDialogHandler();

        browser.AddDialogHandler(myHandler); // This line throws exception

        browser.Button(Find.ById("alertButton")).ClickNoWait();
        myHandler.WaitUntilExists();

        myHandler.OKButton.Click();

        browser.WaitForComplete();

     });
     thread.Name = "KillAlertWindowAsync";
     thread.IsBackground = true;
     thread.SetApartmentState(ApartmentState.STA);
     thread.Start();
   }
}
4

2 に答える 2

0

Emerica のコードを使用して、彼は新しいインスタンスである「Browser.DialogWatcher」を使用しています。これは、ブラウザが静的な場合にのみ機能します。として定義されたブラウザオブジェクトがあるので

browser = new IE(webBrowser1.ActiveXInstance);

代わりに「browser.DialogWatcher」を使用して、その特定のインスタンスを呼び出すことができます。ただし、IE9 とダイアログには既知の問題があることに注意してください。最新の 2.1 WatiN バージョンを使用していることを確認することをお勧めします。そのバージョンが既にあると仮定して、IE 8 を使用するように IE を設定して、IE 9 - WatiN の互換性の問題ではないことを確認してください。これを行うには、ブラウザで F12 を押して、ブラウザとドキュメント モードを IE8 に切り替えます。

于 2013-01-07T18:05:58.157 に答える
0

これを試すことができます:

var approveConfirmDialog = new ConfirmDialogHandler();

using (new UseDialogOnce(Browser.DialogWatcher, approveConfirmDialog))
{
       //Your code to invoke popup.

       approveConfirmDialog.WaitUntilExists(); 
       approveConfirmDialog.OKButton.Click();
}

これは、一般的な OK ポップアップであると想定しています。

于 2012-06-01T15:47:56.100 に答える