Watin&IE9 – 不能单击确定按钮

我正在使用Watin浏览大量不同的网站,我在这里使用了很棒的解决方案,在所有的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); } } 

最近发布了WatiN 2.1,解决了许多IE9问题 。 您可以从http://watin.org/下载或使用NuGet进行更新:

PM> update-package watin

我遇到了同样的问题,无论我做了什么,它都没有工作,直到我找到一个需要时间但对我有用的解决方法。

WaitUntilExists()的默认时间是30秒,因此在IE9中使用它时提供如下扩展时间限制。

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

这当然需要时间,但它确实有效。