Как провалить тесты по умолчанию, если в watin появляется диалоговое окно

Всякий раз, когда появляется диалоговое окно и к нему не подключен обработчик, watin автоматически закрывает диалоговое окно. Это полезно, когда вы не хотите добавлять код для разных/нескольких простых подтверждений, которые может иметь приложение.

Проблема в том, что использование этого поведения по умолчанию может привести к тому, что простые проблемы останутся незамеченными, например диалоговое окно подтверждения, появляющееся в сценариях, в которых оно не должно быть.

Я ищу простой способ изящно провалить тесты при появлении необработанных диалогов. Под словом «изящно» я подразумеваю, что тест останавливается сразу же, как только появляется диалоговое окно с исключением, которое дает приличное сообщение, которое позволяет вам узнать, что это была непредвиденная ошибка диалога.


person eglasius    schedule 08.04.2009    source источник


Ответы (2)


Другим вариантом может быть использование AlertAndConfirmDialogHandler. Этот обработчик закрывает каждое всплывающее диалоговое окно предупреждения или подтверждения, но сначала он получает текст, отображаемый диалоговым окном, и сохраняет его. Вы можете проверить этот массив строк предупреждений и посмотреть, равен ли счетчик нулю. Вы можете сделать это в Teardown или FixtureTeardown тестового класса.

После копии теста из модульного теста WatiN, чтобы показать вам, как вы можете использовать этот обработчик:

        [Test]
    public void AlertAndConfirmDialogHandler()
    {
        DialogWatcher dialogWatcher;

        Assert.AreEqual(0, Ie.DialogWatcher.Count, "DialogWatcher count should be zero before test");

        // Create handler for Alert and confirm dialogs and register it.
        var dialogHandler = new AlertAndConfirmDialogHandler();
        using (new UseDialogOnce(Ie.DialogWatcher, dialogHandler))
        {
            Assert.AreEqual(0, dialogHandler.Count);

            Ie.Button("helloid").Click();

            Assert.AreEqual(1, dialogHandler.Count);
            Assert.AreEqual("hello", dialogHandler.Alerts[0]);

            // remove the alert text from the queue by using Pop
            Assert.AreEqual("hello", dialogHandler.Pop());

            Assert.AreEqual(0, dialogHandler.Count);

            // Clear the queue
            Ie.Button("helloid").Click();

            Assert.AreEqual(1, dialogHandler.Count);

            dialogHandler.Clear();

            Assert.AreEqual(0, dialogHandler.Count);

            dialogWatcher = Ie.DialogWatcher;
        }

        Assert.AreEqual(0, dialogWatcher.Count, "DialogWatcher count should be zero after test");
    }

Это также побуждает меня сделать поведение AutoClose более подключаемым. Было бы неплохо, если бы можно было зарегистрировать обработчик диалога, который будет вызываться, если никакие другие обработчики не могут обработать диалог, вместо того, чтобы просто автоматически закрывать диалоги.

HTH Jeroen van Menen ведущий разработчик WatiN

person Jeroen van Menen    schedule 10.04.2009
comment
У меня проблема с этим методом, иногда он работает, а иногда нет. - person rahoolm; 21.11.2013

На данный момент мы используем:

browser.DialogWatcher.CloseUnhandledDialogs = false

У него есть следующие (уродливые) проблемы:

  1. Ошибка проявляется как тайм-аут следующей операции (используется сообщение «Тайм-аут, пока Internet Explorer занят»).
  2. Из-за вышеизложенного происходят ненужные задержки в тестах
  3. Экземпляры, в которых появилось неожиданное всплывающее окно, остаются открытыми (после удаления).
person eglasius    schedule 08.04.2009