J'ai une application web qui, sous certaines conditions, affiche des alertes JavaScript() auxquelles je dois réagir dans un test WatiN. Google m'a fait à Handling alerts in WATIN de retour en 2007 qui semblait prometteur, et je l'ai adapté le code exemple à ce poste dans ce qui suit (anonymisées):WatiN ne semble pas trouver d'alerte JavaScript
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);
}
Cependant, alors que l'alerte est affichée presque instantanément (comme il est supposé) lorsque DoWrong() est appelée, l'appel à alertDialogHandler.WaitUntilExists() échoue finalement avec un WatiNException: Dialog not available within 10 seconds..
. Le seul problème était que je pouvais voir que le dialogue était définitivement sur l'écran.
Il me manque probablement quelque chose de simple; Quelqu'un peut-il me diriger dans la bonne direction s'il vous plaît?
J'ai également essayé les deux variantes suivantes, et quelques variantes de celles-ci, sans succès; Je continue d'avoir la même erreur.
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);
et
AlertDialogHandler alertDialogHandler = new AlertDialogHandler();
browser.DialogWatcher.Add(alertDialogHandler);
DoWrong(helper, false);
alertDialogHandler.WaitUntilExists();
alertDialogHandler.OKButton.Click();
browser.WaitForComplete();
Assert.IsFalse(alertDialogHandler.Exists());
SecondAssert(browser);
Oui, je sais que le code devient un peu laid, mais maintenant je suis la plupart du temps à essayer de faire fonctionner du tout. Si elle se trouve pendant quelques secondes la cuisson du processeur à 100% d'utilisation en raison de la boucle serrée dans ma deuxième tentative, mais fait ce que j'ai besoin de (simple et simple, rejeter que alert()), c'est OK.
Après ces 10 secondes d'attente, est cette boîte de dialogue d'alerte encore visible? Utilisez-vous WatiN avec Internet Explorer ou avec le contrôle WebBrowser? – prostynick
Oui, la boîte de dialogue d'alerte reste jusqu'à ce que je l'abandonne manuellement, à quel point le code après l'alerte() dans le JavaScript s'exécute. Bien sûr, à ce stade, le test a déjà échoué. J'utilise WatiN avec MSIE. –
Quelle est la version d'IE et de Windows? – prostynick