C # WatiN - Добавить AlertDialogHandler, чтобы нажать кнопку ОК в каждом диалоговом окне оповещения - PullRequest
10 голосов
/ 11 августа 2010

Привет

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

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

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

AlertDialogHandler.OKButton.Click()

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

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

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

1 Ответ

17 голосов
/ 16 августа 2010

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

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());

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

...