2009-06-06 9 views

Répondre

1

Il s'agit d'un bogue dans la liste de sélection où, si la liste n'est pas prête à accepter une entrée, elle peut lancer plusieurs types d'exception. Nous résolvons comme ceci:

try 
{ 
    _domContainer.SelectList(_control.WatinAttribute).Focus(); 
    _domContainer.SelectList(_control.WatinAttribute).Select(value); 
} 

catch (Exception e) 
{ 
    Console.WriteLine("Select list eception caught: " + e.Message + e.StackTrace); 

    // we have tried once already and failed, so let's wait for half a second 
    System.Threading.Thread.Sleep(500); 
    _domContainer.SelectList(_control.WatinAttribute).Select(value); 
} 

Et oui je sais que toutes les exceptions à avaler comme celui-ci est normalement mauvaise, mais si l'exception se produit à nouveau, il est jeté au code de test et le test échoue.

4

Je l'ai vu beaucoup avec les listes de sélection récemment lors de l'utilisation de la version bêta de WatiN 2.0. Au lieu d'utiliser l'option aSelectList.Select (strText), il semble fonctionner mieux quand vous faites ceci:

ie.SelectList(Find.ById("MySelect")).Option(Find.ByText("Option 1")).Select(); 

Cela peut également se produire lors de la modification d'un contrôle ASP.NET qui peuvent causer une auto-postback. La première modification sera enregistrée, mais l'élément suivant auquel vous essayez d'accéder affichera une erreur «Accès refusé» car il tente toujours d'accéder à l'ancienne page. Dans ce cas, vous pouvez essayer d'utiliser ie.WaitForComplete(), mais parfois cela est nécessaire:

ie.SelectList(Find.ById("AutoPostBackSelect")).Option(Find.ByText("Option")).Select(); 
System.Threading.Thread.Sleep(200); //Sleep to make sure post back registers 
ie.WaitForComplete(); 
ie.SelectList(Find.ById("MySelect")).Refresh() 
ie.SelectList(Find.ById("MySelect")).Option(Find.ByText("Option 1")).Select(); 
1

Je remarqué cela se produit si vous essayez de sélectionner une valeur qui est déjà sélectionnée.

Vous pouvez contourner cela avec un contrôle préalable:

if(_sel_ddlPeriodFromDay.GetValue("value")!="1") 
    _sel_ddlPeriodFromDay.SelectByValue("1"); 

ou peut-être utiliser une prise d'essai?

try{_sel_ddlPeriodFromDay.SelectByValue("1");} 
catch{} 
Questions connexes