如果对话框出现在watin中,默认情况下如何失败测试

时间:2009-04-08 10:24:13

标签: c# .net testing automation watin

每当出现一个对话框并且没有附加处理程序时,watin auto会关闭对话框。如果您不想为应用程序可能具有的不同/几个简单确认添加代码,这将非常有用。

问题在于,使用此默认行为可能会导致简单的问题被忽视,例如不应出现在场景中的确认对话框。

我正在寻找一种在未处理的对话框出现时优雅地使测试失败的简单方法。优雅地,我的意思是当对话框出现异常时,测试会停止,这会给出一个不错的消息,让您知道这是一个意外的对话框错误。

2 个答案:

答案 0 :(得分:3)

另一种选择可能是使用AlertAndConfirmDialogHandler。此处理程序会关闭弹出的每个警报或确认对话框,但首先它会获取对话框显示的文本并存储它。您可以检查此警报字符串数组并查看Count是否为零。您可以在测试类的Teardown或FixtureTeardown中执行此操作。

从WatiN unittest获得测试副本,向您展示如何使用此处理程序:

        [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

答案 1 :(得分:1)

目前我们正在使用:

browser.DialogWatcher.CloseUnhandledDialogs = false

它有以下(丑陋)问题:

  1. 错误显示为下一个操作的超时(使用消息“Internet Explorer忙时超时”)。
  2. 由于上述原因,测试中存在不必要的延迟
  3. 意外弹出的实例将保持打开状态(处理后)。