Как провалить тесты по умолчанию, если в ватине появляется диалог - PullRequest
3 голосов
/ 08 апреля 2009

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

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

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

Ответы [ 2 ]

3 голосов
/ 10 апреля 2009

Другим вариантом может быть использование AlertAndConfirmDialogHandler. Этот обработчик закрывает каждое всплывающее окно предупреждения или подтверждения, но сначала он получает текст, отображаемый диалоговым окном, и сохраняет его. Вы можете проверить этот строковый массив Alerts и посмотреть, равен ли счетчик нулю. Вы можете сделать это в 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 более подключаемым. Было бы хорошо, если бы можно было зарегистрировать обработчик диалогов, который будет вызываться, если никакие другие обработчики не смогут обработать диалог, вместо того, чтобы просто автоматически закрывать диалоги.

НТН Йерун ван Менен ведущий разработчик WatiN

1 голос
/ 08 апреля 2009

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

browser.DialogWatcher.CloseUnhandledDialogs = false

Имеются следующие (безобразные) проблемы:

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