WatiN не может найти предупреждение JavaScript - PullRequest
1 голос
/ 01 ноября 2010

У меня есть веб-приложение, которое при некоторых условиях выдает предупреждения JavaScript (ов), на которые мне нужно реагировать в тесте WatiN. Google указал мне на Обработка предупреждений в WATIN с 2007 года, которая казалась многообещающей, и я адаптировал пример кода в этом посте к следующему (анонимно):

    private void MyAssert(IE browser, WatinHelper helper)
    {
        AlertDialogHandler alertDialogHandler = new AlertDialogHandler();

        using (new UseDialogOnce(browser.DialogWatcher, alertDialogHandler))
        {
            // DoWrong() causes a JavaScript alert(); false means use nowait.
            DoWrong(helper, false);

            alertDialogHandler.WaitUntilExists(10 /*seconds*/);

            if (!alertDialogHandler.Exists())
            {
                Assert.Fail("No JavaScript alert when it should have been there");
            }

            alertDialogHandler.OKButton.Click();
        }

        SecondAssert(browser);
    }

Однако, хотя предупреждение отображается практически мгновенно (как и предполагалось) при вызове DoWrong (), вызов alertDialogHandler.WaitUntilExists () в конечном итоге завершается с WatiNException: Dialog not available within 10 seconds... Единственная проблема состояла в том, что я мог видеть, что диалоговое окно наиболее определенно было на экране.

Я, вероятно, упускаю что-то простое; Может кто-нибудь указать мне правильное направление, пожалуйста?

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

        AlertDialogHandler alertDialogHandler = new AlertDialogHandler();

        DoWrong(helper, false);

        System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();
        stopwatch.Start();

        do
        {
        }
        while (!alertDialogHandler.Exists() && stopwatch.Elapsed.TotalMilliseconds < 3000);

        Assert.IsTrue(alertDialogHandler.Exists(), "No JavaScript alert when it should have been there");

        alertDialogHandler.OKButton.Click();
        SecondAssert(browser);

и

        AlertDialogHandler alertDialogHandler = new AlertDialogHandler();
        browser.DialogWatcher.Add(alertDialogHandler);
        DoWrong(helper, false);
        alertDialogHandler.WaitUntilExists();
        alertDialogHandler.OKButton.Click();
        browser.WaitForComplete();
        Assert.IsFalse(alertDialogHandler.Exists());
        SecondAssert(browser);

Да, я знаю, что код становится немного уродливым, но сейчас я в основном пытаюсь заставить его работать вообще. Если он сидит в течение нескольких секунд, готовя процессор при 100% -ной загрузке из-за замкнутого цикла во второй попытке, но выполняет только то, что мне нужно (просто и ясно, отклоните alert () ), все в порядке.

1 Ответ

1 голос
/ 08 ноября 2010

Это проблема с WatiN и IE8, и то, как IE8 изменил способ создания всплывающих окон. Эта проблема исправлена ​​в текущем коде, доступном в репозитории Sourceforge SVN для проекта. Получите, скомпилируйте, и ваша проблема решена.

Новая версия WatiN будет доступна до конца этого года.

НТН, Йерун

...