WatiN似乎找不到JavaScript警报

时间:2010-11-01 09:58:32

标签: c# watin

我有一个Web应用程序,在某些情况下会弹出我需要在WatiN测试中做出反应的JavaScript alert()。谷歌在2007年的Handling alerts in WATIN指出我看起来很有希望,并且我将该帖子中的示例代码改编为以下(匿名):

    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%利用率下烹饪CPU几秒钟,但只做了我需要它(简单明了,忽略 alert()) ,没关系。

1 个答案:

答案 0 :(得分:1)

这是WatiN和IE8的问题以及IE8改变弹出窗口的方式。该问题已在项目的Sourceforge SVN存储库中可用的当前代码中修复。得到它,编译它,你的问题就解决了。

WatiN的新版本将在今年年底之前发布。

HTH, 的Jeroen