2010-11-01 4 views
1

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.

+0

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

+0

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. –

+0

Quelle est la version d'IE et de Windows? – prostynick

Répondre

1

Ceci est un problème avec WatiN et IE8 et la façon dont IE8 a changé la façon dont il crée des popups. Le problème est résolu dans le code actuel disponible dans le référentiel Sourceforge SVN du projet. Obtenez-le, compilez-le et votre problème est résolu.

Une nouvelle version de WatiN sera disponible avant la fin de cette année.

HTH, Jeroen

Questions connexes