C # WatiN - добавьте AlertDialogHandler, чтобы нажимать кнопку ОК в каждом диалоговом окне предупреждений.

Здравствуйте

Те, кто использовал WatiN, вероятно, также использовали DialogHandlers.

Что ж, может кто-нибудь научить меня, как я могу назначить DialogHandler, который будет обрабатывать любое окно предупреждения window.alert() определенного экземпляра IE под управлением WatiN.

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

AlertDialogHandler.OKButton.Click()

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

Это уже несколько часов беспокоит меня, любая помощь приветствуется. Спасибо.

Примечание. Иногда в диалоговом окне предупреждения есть две кнопки. Вот почему мне действительно нужно нажимать кнопку ОК, а не просто закрывать диалоговое окно.


person Fábio Antunes    schedule 11.08.2010    source источник


Ответы (1)


Создать класс:

public class OKDialogHandler : BaseDialogHandler
{
    public override bool HandleDialog(Window window)
    {
        var button = GetOKButton(window);
        if (button != null)
        {
            button.Click();
            return true;
        }
        else
        {
            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);
    }
}

После создания экземпляра IE прикрепите к нему обработчик диалога:

ie.AddDialogHandler(new OKDialogHandler());

Этот обработчик диалогового окна будет обрабатывать все окна, содержащие кнопку с надписью «ОК», при нажатии на эту кнопку.

person prostynick    schedule 16.08.2010
comment
@prostynick - могу ли я узнать, к какому классу принадлежит WindowsEnumerator? Похоже, это суть вашего класса OKDialogHandler. Я нашел это в BaseDialogHandler. Спасибо! - person voidmain; 09.05.2017
comment
Нет, я ошибался. Я нашел WindowsEnumerator не в BaseDialogHandler, а в WatiN.Core.Native.InternetExplorer. - person voidmain; 09.05.2017