我正在尝试点击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();
}
}
答案 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。