Watin & IE9 - не могу нажимать кнопки ОК - PullRequest
3 голосов
/ 11 апреля 2011

Я использую 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);
        }
    }

Ответы [ 2 ]

2 голосов
/ 19 марта 2012

Я столкнулся с той же проблемой, и независимо от того, что я делаю, она не работала, пока я не нашел обходной путь, который требует времени, но работает для меня.

Время по умолчанию для WaitUntilExists() составляет 30 секунд, поэтому при использовании его в IE9 предоставьте расширенный лимит времени следующим образом.

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

Конечно, это займет время, но работает.

2 голосов
/ 13 апреля 2011

WatiN 2.1 был недавно выпущен, что решает ряд проблем IE9 .Вы можете скачать его с http://watin.org/ или обновить с помощью NuGet:

PM> Пакет обновлений watin

...