Watin - Обработка Confirm Диалоги с ConfirmDialogHandler

голоса
15

Используя Watin, я пытаюсь справиться диалоговое окно подтверждения и сказать WatiN нажать «OK». Это reasoanbly хорошо документированы в Интернете - вы используете ConfirmDialogHandlerи UseDialogOnceспособ .. За исключением он не работает для меня. Я получаю следующее сообщение об ошибке:

WatiN.Core.Exceptions.WatiNException: Dialog not available within 5 seconds

Я использую бета атм WatiN 2.0, но я был ранее с использованием более ранней версии 1.X которая имела такой же вопрос. Испытано на машине коллеги работает 64-битной Vista, я бегу 64 битную Windows 7.

Код выглядит следующим образом:

        using (IE ie = new IE(http://localhost/TestApp/TestConfirmPage.asp))
        {
            var approveConfirmDialog = new ConfirmDialogHandler();

            using (new UseDialogOnce(ie.DialogWatcher, approveConfirmDialog))
            {
                ie.Button(Find.ByName(btn)).ClickNoWait();
                approveConfirmDialog.WaitUntilExists(5);
                approveConfirmDialog.OKButton.Click();
            }
            ie.WaitForComplete();
        }

Страница ASP очень проста, он состоит из одной кнопки, которая заставляет подтверждающую, как это:

<input type=button name=btn id=btn value=Click me onclick=ConfirmApp()  />

И ConfirmAppбыла урезанная для тестирования , так что теперь все это содержит это:

 bOK = confirm(You clicked a popup. Did you mean to?);
 return bOK;
Задан 19/05/2009 в 14:13
источник пользователем
На других языках...                            


4 ответов

голоса
11

Код выглядит хорошо для меня, и я думаю, что он должен работать. Только думаю, что я сделал по-другому было поставить Ждите Complete внутри с помощью диалогового блока. Не знаю почему, но прежде, чем я сделал, что у меня есть некоторые проблемы, иногда это работает, иногда нет. И я не использую ограничение времени на Ожидать, пока не существует. Но вы, наверное, уже пробовали, что один.

Например:

using (new UseDialogOnce(ie.DialogWatcher, approveConfirmDialog))
        {
            ie.Button(Find.ByName("btn")).ClickNoWait();
            approveConfirmDialog.WaitUntilExists();
            approveConfirmDialog.OKButton.Click();
            ie.WaitForComplete();
        }
Ответил 27/05/2009 в 10:54
источник пользователем

голоса
1

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

Время по умолчанию истекать на WaitUntilExists() 30 секунд поэтому при использовании его в IE9 обеспечивает длительный срок следующим образом .

handler.WaitUntilExists(40); // or whatever time suits you above 30

Это, конечно, потребуется время, но это работает.

Ответил 19/03/2012 в 12:09
источник пользователем

голоса
2

У меня был та же проблема, и пытался много вещей, но просто забывает одну части я звала .click (), а затем просто изменила его .ClickNoWait () и вещи отсортированы. Надеюсь это поможет

Ответил 08/12/2012 в 17:41
источник пользователем

голоса
0

Просто провел пару часов с вариациями в диалоговых решениях наблюдатели. Ничто не работает для меня в IE9.

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

  • Для ОК. Выполните все шаги, ведущие к кнопке ClickNoWait, то:

SendKeys.SendWait ( "{ENTER}");

  • Для ОТМЕНА. Выполните все шаги, ведущие к элементу ClickNoWait, то: SendKeys.SendWait ( "{TAB}"); SendKeys.SendWait ( "{ENTER}");

Примечание: с помощью System.Windows.Forms

Ответил 30/10/2013 в 17:51
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more