开发者

WatiN seems to not find JavaScript alert

开发者 https://www.devze.com 2023-01-22 16:24 出处:网络
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 i

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.


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

0

精彩评论

暂无评论...
验证码 换一张
取 消