Je suis nouveau dans le test de l’interface utilisateur codée, alors voici une question “simple”:
En essayant de naviguer à travers les options d’un menu, j’ai enregistré des actions que nad a tenté de lire. J’ai eu le message suivant: The playback failed to find the control with the given search properties
Voici le code généré par l’outil d’enregistrement:
public void NavegarSituacao() { #region Variable Declarations HtmlCustom uINotíciasCustom = this.UIHttpcmshomepsafecomIWindow.UIHttpcmshomepsafecomDocument.UINotíciasCustom; HtmlCustom uIEntretenimentoCustom = this.UIHttpcmshomepsafecomIWindow.UIHttpcmshomepsafecomDocument.UIEntretenimentoCustom; HtmlCustom uIMulherCustom = this.UIHttpcmshomepsafecomIWindow.UIHttpcmshomepsafecomDocument.UIMulherCustom; HtmlCustom uIEsportesCustom = this.UIHttpcmshomepsafecomIWindow.UIHttpcmshomepsafecomDocument.UIEsportesCustom; HtmlCustom uIHomemCustom = this.UIHttpcmshomepsafecomIWindow.UIHttpcmshomepsafecomDocument.UIHomemCustom; HtmlCustom uITecnologiaCustom = this.UIHttpcmshomepsafecomIWindow.UIHttpcmshomepsafecomDocument.UITecnologiaCustom; HtmlCustom uIVídeosCustom = this.UIHttpcmshomepsafecomIWindow.UIHttpcmshomepsafecomDocument.UIVídeosCustom; #endregion // Click 'Notícias' custom control Mouse.Click(uINotíciasCustom, new Point(89, 21)); // Click 'Entretenimento' custom control Mouse.Click(uIEntretenimentoCustom, new Point(90, 15)); // Click 'Mulher' custom control Mouse.Click(uIMulherCustom, new Point(90, 9)); // Click 'Esportes' custom control Mouse.Click(uIEsportesCustom, new Point(84, 18)); // Click 'Homem' custom control Mouse.Click(uIHomemCustom, new Point(82, 16)); // Click 'Tecnologia' custom control Mouse.Click(uITecnologiaCustom, new Point(85, 8)); // Click 'Vídeos' custom control Mouse.Click(uIVídeosCustom, new Point(70, 11)); }
Existe-t-il un moyen d’attraper ces éléments avec un type de localisateur (ces éléments n’ont pas d’identifiant)? Quelque chose comme ça:
public HtmlCustom UIHomemCustom { get { if ((this.mUIHomemCustom == null)) { this.mUIHomemCustom = new HtmlCustom(this); #region Search Criteria this.mUIHomemCustom.SearchProperties["TagName"] = "LI"; this.mUIHomemCustom.SearchProperties["Id"] = null; this.mUIHomemCustom.SearchProperties[UITestControl.PropertyNames.Name] = null; this.mUIHomemCustom.FilterProperties["Class"] = null; this.mUIHomemCustom.FilterProperties["ControlDefinition"] = "data-value=\"201405231131464799\""; this.mUIHomemCustom.FilterProperties["InnerText"] = "Homem"; this.mUIHomemCustom.FilterProperties["TagInstance"] = "8"; this.mUIHomemCustom.FilterProperties["Xpath"] = "#default > div.wrapper > div.menu > div > ul > li:nth-child(5)"; this.mUIHomemCustom.WindowTitles.Add("http://cms.home.psafe.com/"); #endregion } return this.mUIHomemCustom; } }
Voilà le menu:
Accédez à la mappe d’interface utilisateur et remplacez FilterProperty
for InnerText
par SearchProperty
. Les propriétés de recherche sont appliquées en premier – si elles trouvent une correspondance exacte, elles ne consultent même pas les propriétés de filtre. Dans ce cas, l’élément le plus important concernant le contrôle (la valeur de texte) est une propriété de filtre.
Il essaie de trouver une
sans identifiant. Il trouve sans aucun doute plusieurs correspondances. Ensuite, il applique les propriétés du filtre, qui varient probablement d’un chargement de page à un autre.
Vous pouvez également appliquer une propriété ID
aux balises
, puis mettre à jour les propriétés de recherche de la carte de l’interface utilisateur afin qu’elle recherche cet ID spécifique, ce qui résoudrait également le problème.
En général, lorsque vous utilisez une interface utilisateur codée avec des applications Web, il est judicieux de vous assurer que tout sur la page possède un atsortingbut “ID” unique. Cela facilite beaucoup la tâche de l’interface utilisateur codée pour se concentrer sur les éléments de page avec lesquels vous essayez d’interagir.
L’un des aspects intéressants de la lecture de CODEDUI est qu’elle ne prend pas nécessairement en compte les facteurs temporels de l’utilisateur lors de l’enregistrement. Ce sont les choses que j’ai apsockets au fil des ans sur ce type d’erreur …
J’ai eu un problème similaire et suis tombé dessus. Dans mon cas, j’utilisais d’anciens tests CodedUI enregistrés avec une version légèrement plus ancienne (12.0.21005.1). Même message d’erreur (“La lecture n’a pas réussi à trouver le contrôle avec les propriétés de recherche données”) et l’erreur mentionnait spécifiquement une entrée de texte introuvable sur la page.
La réponse pour moi était que l’object BrowserWindow perdait sa référence lorsque la page a été modifiée (après avoir cliqué sur un lien d’une page précédente). Je ne sais pas pourquoi.
La solution consistait à appeler BrowserWindow.TryFind () dans une instruction de journal, puis tout fonctionnait comme précédemment.
Jus pensait que je partagerais au cas où quelqu’un d’autre aurait ce problème.