WetiN - 无法将Return DialogHandler添加到现有Web浏览器

时间:2012-05-31 15:40:22

标签: exception dialog handler watin

我正在尝试点击javascript警告窗口的“确定”按钮。但是,方法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();
   }
}

2 个答案:

答案 0 :(得分:0)

你可以试试这个:

var approveConfirmDialog = new ConfirmDialogHandler();

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

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

这是假设它是一个通用的ok弹出窗口。

答案 1 :(得分:0)

使用Emerica的代码,他正在使用“Browser.DialogWatcher”这是一个新实例。这应该只适用于您的浏览器是静态的。因为你有一个浏览器对象定义为

browser = new IE(webBrowser1.ActiveXInstance);

您可以使用“browser.DialogWatcher”来调用该特定实例。但有一点需要注意,IE9和对话框存在已知问题。我建议你确保你拥有最新的2.1 WatiN版本。假设您已经拥有该版本,请尝试将IE设置为使用IE 8来确认它不是IE 9 - WatiN兼容性问题。要做到这一点,只需在浏览器中点击F12并切换浏览器&文档模式到IE8。