Метод Watin AddDialogHandler, генерирующий исключение нулевой ссылки в FF - PullRequest
2 голосов
/ 20 июня 2010

Я пытаюсь добавить ConfirmDialogHandler в обработчик диалогов, и я получаю исключение NullReferenceException. Это происходит на FF 3.6 с последней версией watin, тот же код работает на IE7 и 8.

   ConfirmDialogHandler confirmDialogHandler = new ConfirmDialogHandler();
   browser.AddDialogHandler(confirmDialogHandler); // --> exception here

Есть идеи?

1 Ответ

1 голос
/ 21 июня 2010

Старое решение

Обнаружена проблема.

DialogWatcher не был инициализирован при создании сеанса FF, добавил эту строку в код watin:

    private void CreateFireFoxInstance(string url)
    {
        Logger.LogAction("Creating FireFox instance");

        UtilityClass.MoveMousePoinerToTopLeft(Settings.AutoMoveMousePointerToTopLeft);

        var clientPort = GetClientPort();
        clientPort.Connect(url);
        _ffBrowser = new FFBrowser(clientPort);
        StartDialogWatcher();  // <-- Added line
        WaitForComplete();
    }

Обратите внимание - это обходной путь

Предоставленное решение не сработало. Это мой обходной путь: я использовал AutoIt dll и обрабатывал всплывающие окна самостоятельно, пример кода:

    using AutoItX3Lib;

    public static void RunAutomaticEnterCommand(Session session)
    {
        var autoIt = GetPopupHandle();
        autoIt.Send("{ENTER}");
        Thread.Sleep(1000);
    }


    /// <summary>
    /// Cancel the popup
    /// For FF
    /// </summary>
    /// <param name="session"></param>
    public static void RunAutomaticCancelCommand(Session session)
    {
        var autoIt = GetPopupHandle();
        autoIt.Send("{TAB}");
        autoIt.Send("{ENTER}");
        Thread.Sleep(1000);
    }

    /// <summary>
    /// Return the autoit popup handler
    /// AutoIt is a script language, we using it to handle the firefox popups
    /// </summary>
    /// <returns></returns>
    private static AutoItX3Class GetPopupHandle()
    {
        var autoIt = new AutoItX3Class();
        autoIt.AutoItSetOption("WinTitleMatchMode", 2);
        const string partialTitle = "The page at"; //the popup in Firefox starts with this text
        autoIt.WinWait(partialTitle, "", 30);
        string fullTitle = autoIt.WinGetTitle(partialTitle); //Get the whole popup title

        autoIt.WinActivate(fullTitle); //Get focis to the popup
        if (autoIt.WinWaitActive(fullTitle, "", 20) == 0)
        {
            reporter.Report("Failed to get the FireFox popup handle", false);
            return autoIt;
        }
        return autoIt;
    }
...