WatiN seems to not find JavaScript alert

非 Y 不嫁゛ 提交于 2020-01-05 08:03:16

问题


I have a web application that, under some conditions, pop up JavaScript alert()s that I need to react to in a WatiN test. Google pointed me at Handling alerts in WATIN from way back in 2007 that seemed promising, and I adapted the example code in that post into the following (anonymized):

    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);
    }

However, while the alert is displayed virtually instantaneously (as it is supposed to) when DoWrong() is called, the call to alertDialogHandler.WaitUntilExists() eventually fails with a WatiNException: Dialog not available within 10 seconds... The only problem was that I could see that the dialog most definitely was up on the screen.

I'm probably missing something simple; can someone point me in the right direction please?

I have also tried the following two variants, and some variations of them, with no luck; I keep getting the same error.

        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);

and

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

Yes, I know that code is getting a bit ugly, but right now I'm mostly trying to get it to work at all. If it sits for a few seconds cooking the CPU at 100% utilization because of the tight loop in my second attempt, but only does what I need it to (plain and simple, dismiss that alert()), it's OK.


回答1:


This is an issue with WatiN and IE8 and the way IE8 changed the way it creates popups. The issue is fixed in the current code available at the Sourceforge SVN repository for the project. Get it, compile it and your problem is solved.

A new release of WatiN will be available before the end of this year.

HTH, Jeroen



来源:https://stackoverflow.com/questions/4067913/watin-seems-to-not-find-javascript-alert

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!