Watin DialogHandler закрывает SaveFileDialog

На основе this answer Я создал пользовательский DialogHandler для обработки всплывающих окон предупреждений Javascript из элемента управления WebBrowser.

Handler прикреплен к унаследованному браузеру WatiN IE, который называется ExtendedIeBrowser.

По неизвестной причине DialogHandler watin мешает Winforms SaveFiledialogs. SaveFileDialog автоматически закрывается путем возврата DialogResult.Cancel. Странно то, что Handle() пользовательского обработчика никогда не вызывается. Вызывается только CanHandle() (дважды), и он возвращает false, поэтому диалог не должен обрабатываться вообще, поэтому он должен оставаться открытым.

Могу ли я что-нибудь сделать, чтобы преодолеть это странное поведение?

Это ExtendedIeBrowser источник:

public class ExtendedIeBrowser : IE
{
    private IntPtr hwnd;
    public ExtendedIeBrowser(WebBrowser webBrowserControl) : base(webBrowserControl.ActiveXInstance, false)
    {
    }

    public void Initialize(WebBrowser webBrowserControl)
    {
        hwnd = webBrowserControl.FindForm().Handle;
        StartDialogWatcher();
    }

    public override IntPtr hWnd { get { return hwnd; } }

    protected override void Dispose(bool disposing)
    {
        hwnd = IntPtr.Zero;
        base.Dispose(disposing);
    }
}

Следуя CustomPopupDialogHandler источнику:

class CustomPopupDialogHandler : ReturnDialogHandler
{
    protected static Logger _logger = LogManager.GetCurrentClassLogger();

    public override bool HandleDialog(Window window)
    {
        bool handled = false;
        try
        {
            var button = GetWantedButton(window);
        if (button != null)
        {
            button.Click();
        }
            handled = true;
        }
        catch (Exception ex)
        {
            _logger.ErrorException("HandleDialog", ex);
        }
        return handled;
    }

    public override bool CanHandleDialog(Window window)
    {
        bool canHandle = false;
        try
        {
        canHandle = GetWantedButton(window) != null;
        }
        catch (Exception ex)
        {
            _logger.ErrorException("CanHandleDialog", ex);
        }
        return canHandle;
    }

    private WinButton GetWantedButton(Window window)
    {
        WinButton button = null;
        try
        {
            if (window.Title.Contains("Windows Internet Explorer") || window.Title.Contains("Message from webpage"))
            {
                var windowButton = new WindowsEnumerator().GetChildWindows(window.Hwnd, w => w.ClassName == "Button" && (new WinButton(w.Hwnd).Title.Contains("Leave") || new WinButton(w.Hwnd).Title.Contains("OK")).FirstOrDefault();
                if (windowButton != null)
                {
                    string s = windowButton.Title;
                    button = new WinButton(windowButton.Hwnd);
                }
            }
        }
        catch (Exception ex)
        {
            _logger.ErrorException("GetWantedButton", ex);
        }
        return button;
    }
}

person iCantSeeSharp    schedule 27.06.2012    source источник
comment
Я не знал, что watin может мешать диалогам кроме WebBrowser !!   -  person Odys    schedule 27.06.2012


Ответы (1)


Попробуй это:

WatiN.Core.Settings.AutoCloseDialogs = false;

По умолчанию установлено true.

person Odys    schedule 27.06.2012