我正在使用Watin浏览大量不同的网站,我正在使用优秀的解决方案here自动点击所有javascript和即弹出框的确定。
问题是,这个解决方案适用于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 :(得分:2)
最近发布了WatiN 2.1,其中涉及了许多IE9 issues。您可以从http://watin.org/下载或使用NuGet进行更新:
PM>更新包watin
答案 1 :(得分:2)
我遇到了同样的问题,无论我做什么,它都没有工作,直到找到一个需要时间但对我有用的解决方法。
WaitUntilExists()
的默认时间为30秒,因此在IE9中使用时提供延长的时间限制,如下所示。
handler.WaitUntilExists(40); // or whatever time suits you above 30
这肯定需要时间但是有效。