【问题标题】:Watin & IE9 - Cant click ok buttonsWatin & IE9 - 不能点击确定按钮
【发布时间】:2011-08-03 08:22:32
【问题描述】:

我正在使用 Watin 浏览大量不同的网站,并且我正在使用出色的解决方案 here 自动点击所有弹出的 javascript 和 ie 框上的确定。

问题是,这个解决方案适用于 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);
        }
    }

【问题讨论】:

  • 感谢您清理代码,david,我在尝试格式化时遇到了问题
  • 我大量使用WatiN,在支持稳定之前等待升级到IE9...我建议你降级。

标签: c# watin internet-explorer-9


【解决方案1】:

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

PM> 更新包watin

【讨论】:

  • 感谢 Jim,watin 2.1 似乎能够点击这个 ie9 对话框,而且启动起来似乎更快!
【解决方案2】:

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

WaitUntilExists() 的默认时间为 30 秒,因此在 IE9 中使用时提供如下延长时间限制。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-17
    • 1970-01-01
    • 2021-02-20
    • 1970-01-01
    • 1970-01-01
    • 2013-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多