La lecture n’a pas réussi à trouver le contrôle avec les propriétés de recherche données dans l’interface utilisateur codée.

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:

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 …

    1. La fenêtre ou le contrôle en cours n’est pas la fenêtre Haut le plus.
    2. Les critères de recherche sont trop ressortingctifs, demandez-vous s’il y a quelque chose dans ces critères de recherche qui n’est pas la même chose que l’enregistrement. Dans ce cas, je peux voir un problème possible avec ceci: “data-value = \” 201405231131464799 \ “” Ce nombre est-il identique à chaque fois?
    3. Le contrôle est recherché avant qu’il soit prêt à être fait. Ceci est corrigé en appelant (dans votre cas) Custom.WaitForReady ()
    4. J’ai aussi vu ceci (que je ne comprends pas bien) parce que ces enregistrements n’ont pas de coordonnées X, Y; sauf pour le point défini dans le deuxième paramètre. Si la taille de l’écran d’enregistrement et celle de la lecture ne sont PAS identiques, il arrive parfois (mais pas toujours) que la lecture “ne trouve pas le contrôle”. Vous pouvez essayer d’omettre le paramètre point.
    5. L’élément n’est tout simplement pas visible.

    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.