У меня есть веб-приложение, которое при некоторых условиях выдает предупреждения JavaScript (ов), на которые мне нужно реагировать в тесте WatiN. Google указал мне на Обработка предупреждений в WATIN с 2007 года, которая казалась многообещающей, и я адаптировал пример кода в этом посте к следующему (анонимно):
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% -ной загрузке из-за замкнутого цикла во второй попытке, но выполняет только то, что мне нужно (просто и ясно, отклоните alert () ), все в порядке.