2016-10-04 9 views
0

J'ai créé une méthode générique qui peut être utilisée pour rechercher des enregistrements dans notre AUT.L'identification d'objet a échoué dans l'interface utilisateur codée, lors de l'exécution d'une méthode dans une boucle

Maintenant, j'ai un scénario dont j'ai besoin pour exécuter mon code plusieurs fois. J'ai donc créé une boucle et essayé d'exécuter. La première itération est exécutée sans problème et la page est fermée. Rouvrez la page et tous les contrôles sont chargés, mais l'identification de l'objet a échoué lors de la deuxième itération.

initialisation de l'objet Htmledit comme ci-dessous:

HtmlEdit medit = new HtmlEdit(objSearchPage);  
medit.SearchProperties.Add("Name", "1$SearchText", PropertyExpressionOperator.Contains);  
medit.SearchProperties[HtmlEdit.PropertyNames.TagName] = "INPUT";  
medit.SearchProperties[HtmlEdit.PropertyNames.ControlType] = "Edit"; 

La lecture a échoué en essayant de saisir du texte sur la case « Medit » au cours de la deuxième itération. Première itération réussie: medit.Text = searchItem;

+0

Le problème se produit-il sans votre code? Je demande parce que les questions sur le code vous oblige à poster votre code. Si la question concerne l'interface utilisateur codée et que votre code n'est pas pertinent, clarifiez-le. –

+0

en initialisant l'objet HtmlEdit comme ci-dessous, HtmlEdit medit = new HtmlEdit (objSearchPage); medit.SearchProperties.Add ("Nom", "1 $ SearchText", PropertyExpressionOperator.Contains); medit.SearchProperties [HtmlEdit.PropertyNames.TagName] = "INPUT"; medit.SearchProperties [HtmlEdit.PropertyNames.ControlType] = "Modifier"; La lecture a échoué lors de la tentative de saisie de texte dans la boîte 'medit' au cours de la deuxième itération. Première itération c'est le succès - medit.Text = searchItem; – SSNair

+0

La duplication possible de ["control.Exists" dans une boucle fonctionne pour la première fois et pas pour la deuxième fois dans l'interface utilisateur codée] (http://stackoverflow.com/questions/27526163/control-exists-within-a-loop-works -pour-la-première-fois-et-non-pour-la-deuxième-fois-en-c) – AdrianHHH

Répondre

0

Si la fenêtre de votre navigateur s'ouvre et se ferme pendant l'itération, vous devez inclure le code d'initialisation dans la boucle ou utiliser le paramètre AlwaysSearch.

foreach(var thing in thingsToDo) 
{ 
    HtmlEdit medit = new HtmlEdit(objSearchPage);  
    medit.SearchProperties.Add("Name", "1$SearchText", PropertyExpressionOperator.Contains);  
    medit.SearchProperties[HtmlEdit.PropertyNames.TagName] = "INPUT";  
    medit.SearchProperties[HtmlEdit.PropertyNames.ControlType] = "Edit"; 

    // use medit now and it will work 
} 

ou

HtmlEdit medit = new HtmlEdit(objSearchPage);  
medit.SearchProperties.Add("Name", "1$SearchText", PropertyExpressionOperator.Contains);  
medit.SearchProperties[HtmlEdit.PropertyNames.TagName] = "INPUT";  
medit.SearchProperties[HtmlEdit.PropertyNames.ControlType] = "Edit"; 

// I'm not sure this will work because the browser window is different 
medit.SearchConfigurations.Add(SearchConfiguration.AlwaysSearch); 
0

@MPavlak est proche de l'argent. Ce que je pense que nous pouvons oublier est que vous devrez également réinitialiser votre contrôle parent (objSearchPage). Assurez-vous qu'il existe et est trouvé avant de chercher medit.

foreach(var thing in thingsToDo) 
{ 
    var objSearchPage = new UITestControl(); //you can also just reinitialize here if it's been previously declared. 
    objSearchPage.SearchProperties.Add("yourPropertyHere"); 

    HtmlEdit medit = new HtmlEdit(objSearchPage);  
    medit.SearchProperties.Add("Name", "1$SearchText", PropertyExpressionOperator.Contains);  
    medit.SearchProperties[HtmlEdit.PropertyNames.TagName] = "INPUT";  
    medit.SearchProperties[HtmlEdit.PropertyNames.ControlType] = "Edit"; 
}