2009-04-08 6 views
3

Lorsqu'une boîte de dialogue apparaît et qu'aucun gestionnaire n'est attaché, watin ferme automatiquement la boîte de dialogue. Ceci est utile lorsque vous ne souhaitez pas ajouter de code pour différentes/plusieurs confirmations simples que l'application peut avoir. Le problème est que l'utilisation de ce comportement par défaut peut faire passer des problèmes simples inaperçus, comme une boîte de dialogue de confirmation apparaissant dans les scénarios.Comment faire échec aux tests par défaut si une boîte de dialogue apparaît dans watin

Je cherche un moyen simple d'échouer gracieusement les tests lorsque des boîtes de dialogue non gérées apparaissent. Avec gracieusement je veux dire que le test s'arrête juste quand la boîte de dialogue apparaît avec une exception, qui donne un message décent qui vous permet de savoir qu'il s'agissait d'une erreur de dialogue inattendue.

Répondre

3

Une autre option pourrait être d'utiliser le AlertAndConfirmDialogHandler. Ce gestionnaire ferme toutes les alertes ou confirme la boîte de dialogue qui apparaît mais d'abord il obtient le texte affiché par le dialogue et le stocke. Vous pouvez inspecter ce tableau de chaînes d'alertes et voir si le compte est zéro. Vous pouvez le faire dans Teardown ou FixtureTeardown de la classe de test.

Après une copie d'un test de la Watin unittest pour vous montrer comment vous pouvez utiliser ce gestionnaire:

 [Test] 
    public void AlertAndConfirmDialogHandler() 
    { 
     DialogWatcher dialogWatcher; 

     Assert.AreEqual(0, Ie.DialogWatcher.Count, "DialogWatcher count should be zero before test"); 

     // Create handler for Alert and confirm dialogs and register it. 
     var dialogHandler = new AlertAndConfirmDialogHandler(); 
     using (new UseDialogOnce(Ie.DialogWatcher, dialogHandler)) 
     { 
      Assert.AreEqual(0, dialogHandler.Count); 

      Ie.Button("helloid").Click(); 

      Assert.AreEqual(1, dialogHandler.Count); 
      Assert.AreEqual("hello", dialogHandler.Alerts[0]); 

      // remove the alert text from the queue by using Pop 
      Assert.AreEqual("hello", dialogHandler.Pop()); 

      Assert.AreEqual(0, dialogHandler.Count); 

      // Clear the queue 
      Ie.Button("helloid").Click(); 

      Assert.AreEqual(1, dialogHandler.Count); 

      dialogHandler.Clear(); 

      Assert.AreEqual(0, dialogHandler.Count); 

      dialogWatcher = Ie.DialogWatcher; 
     } 

     Assert.AreEqual(0, dialogWatcher.Count, "DialogWatcher count should be zero after test"); 
    } 

Cela me déclenche également de faire le comportement AutoClose plus connectable. Ce serait bien si l'on pouvait enregistrer un gestionnaire de dialogue qui sera appelé si aucun autre gestionnaire ne peut gérer une boîte de dialogue, au lieu de simplement fermer automatiquement les boîtes de dialogue.

HTH Jeroen van Menen plomb dev Watin

+0

Je suis face à problème avec cette méthode, cela fonctionne parfois et ne parfois pas. – rahoolm

1

Pour l'instant, nous utilisons:

browser.DialogWatcher.CloseUnhandledDialogs = false 

Il a les questions suivantes (laid):

  1. L'erreur apparaît comme un délai d'attente de l'opération suivante (en utilisant le message « Délai d'attente alors que Internet Explorateur occupé ").
  2. En raison de ce qui précède, il y a des retards inutiles dans les tests
  3. Les instances qui avaient le pop-up inattendu sont laissées ouvertes (après la mise au rebut).
Questions connexes