Partager via


Obtention d'éléments UI Automation

RemarqueRemarque

Cette documentation s'adresse aux développeurs .NET Framework qui veulent utiliser les classes UI Automation managées définies dans l'espace de noms System.Windows.Automation.Pour obtenir les informations les plus récentes sur UI Automation, consultez API Windows Automation : UI Automation (page éventuellement en anglais).

Cette rubrique décrit les différentes façons d'obtenir des objets AutomationElement pour des éléments d'user interface (UI).

Remarque AttentionAttention

Si votre application cliente tente de trouver des éléments dans sa propre interface utilisateur, vous devez effectuer tous les appels UI Automation sur un thread distinct.Pour plus d'informations, consultez Problèmes liés aux threads UI Automation.

Cette rubrique comprend les sections suivantes.

  • Élément racine
  • Conditions
  • Portée de la recherche
  • Recherche d'un élément connu
  • Recherche d'éléments dans un sous-arbre
  • Parcourir un sous-arbre
  • Autres façons de récupérer un élément
  • Rubriques connexes

Élément racine

Toutes les recherches d'objets AutomationElement doivent avoir un point de départ. Ce peut être n'importe quel élément, y compris le bureau, une fenêtre d'application ou un contrôle.

L'élément racine pour le bureau, duquel tous les éléments descendent, est obtenu à partir de la propriété AutomationElement.RootElement statique.

Remarque AttentionAttention

En général, vous devez essayer de n'obtenir que les enfants directs du RootElement.Une recherche des descendants peut itérer au sein de centaines ou de milliers d'éléments, ce qui peut provoquer un dépassement de capacité de la pile.Si vous tentez d'obtenir un élément spécifique à un niveau inférieur, vous devez commencer votre recherche à partir de la fenêtre d'application ou d'un conteneur à un niveau inférieur.

Conditions

Avec la plupart des techniques que vous pouvez utiliser pour récupérer des éléments UI Automation, vous devez spécifier une Condition, c'est-à-dire un jeu de critères définissant les éléments que vous souhaitez récupérer.

La condition la plus simple est TrueCondition, un objet prédéfini spécifiant que tous les éléments de la portée de la recherche doivent être retournés. FalseCondition, l'inverse de TrueCondition, est moins utile vu qu'il empêche certains éléments d'être recherchés.

Trois autres conditions prédéfinies peuvent être utilisées, seules ou associées à d'autres conditions : ContentViewCondition, ControlViewCondition et RawViewCondition. RawViewCondition, utilisé tout seul, équivaut à TrueCondition car il ne filtre pas les éléments par leurs propriétés IsControlElement ou IsContentElement.

D'autres conditions sont développées à partir d'un ou plusieurs objets PropertyCondition, spécifiant chacun une valeur de propriété. Par exemple, un PropertyCondition peut spécifier que l'élément est activé ou qu'il prend en charge un certain modèle de contrôle.

Les conditions peuvent être associées à l'aide d'une logique booléenne en construisant des objets de types AndCondition, OrCondition et NotCondition.

Portée de la recherche

Les recherches effectuées à l'aide de FindFirst ou FindAll doivent avoir une portée ainsi qu'un point de départ.

La portée définit l'espace autour du point de départ à rechercher. Cela peut inclure l'élément lui-même, ses frères, son parent, ses ancêtres, ses enfants immédiats et ses descendants.

La portée d'une recherche est définie par une combinaison d'opérations de bits des valeurs de l'énumération TreeScope.

Recherche d'un élément connu

Pour rechercher un élément connu, identifié par son Name, AutomationId, ou une autre propriété ou combinaison de propriétés, il est plus facile d'utiliser la méthode FindFirst. Si l'élément recherché est une fenêtre d'application, le point de départ de la recherche peut être l'RootElement.

Cette façon de rechercher des éléments UI Automation est particulièrement utile dans des scénarios de tests automatisés.

Recherche d'éléments dans un sous-arbre

Pour rechercher tous les éléments qui répondent aux critères spécifiques en relation avec un élément connu, vous pouvez utiliser FindAll. Par exemple, vous pourriez utiliser cette méthode pour récupérer des éléments de liste ou des éléments de menu à partir d'une liste ou d'un menu ou bien identifier tous les contrôles d'une boîte de dialogue.

Parcourir un sous-arbre

Si vous n'avez aucune connaissance antérieure des applications avec lesquelles votre client peut être utilisé, vous pouvez construire un sous-arbre de tous les éléments intéressants à l'aide de la classe TreeWalker. Votre application peut le faire en réponse à un événement dont le focus a changé ; c'est-à-dire que lorsqu'une application ou un contrôle reçoit le focus d'entrée, le client UI Automation examine les enfants, voire tous les descendants de l'élément possédant le focus.

L'autre moyen d'utiliser TreeWalker est d'identifier les ancêtres d'un élément. Par exemple, en parcourant l'arborescence vous pouvez identifier la fenêtre parente d'un contrôle.

Vous pouvez utiliser TreeWalker en créant un objet de la classe (en définissant les éléments intéressants en passant une Condition) ou en utilisant l'un des objets prédéfinis suivants, définis en tant que champs de TreeWalker.

ContentViewWalker

Ne recherche que les éléments dont la propriété IsContentElement est true.

ControlViewWalker

Ne recherche que les éléments dont la propriété IsControlElement est true.

RawViewWalker

Recherche tous les éléments.

Après avoir obtenu un TreeWalker, il est simple de l'utiliser. Appelez simplement les méthodes Get pour naviguer parmi éléments du sous-arbre.

La méthode Normalize permet de naviguer vers un élément de la sous-arborescence à partir d'un autre élément qui ne fait pas partie de la vue. Par exemple, supposez que vous avez créé l'affichage d'un sous-arbre à l'aide de ContentViewWalker. Votre application reçoit alors la notification qu'une barre de défilement a reçu le focus d'entrée. Étant donné qu'une barre de défilement n'est pas un élément de contenu, elle n'est pas présente dans l'affichage de votre sous-arbre. Toutefois, vous pouvez passer le AutomationElement représentant la barre de défilement pour Normalize et récupérer l'ancêtre le plus proche situé dans l'affichage du contenu.

Autres façons de récupérer un élément

En plus des recherches et de la navigation, vous pouvez récupérer un AutomationElement des manières suivantes.

À partir d'un événement

Lorsque votre application reçoit un événement UI Automation, l'objet source passé à votre gestionnaire d'événements est un AutomationElement. Par exemple, si vous vous êtes abonné à des événements dont le focus a changé, la source passée à votre AutomationFocusChangedEventHandler est l'élément qui a reçu le focus.

Pour plus d'informations, consultez S'abonner à des événements UI Automation.

À partir d'un point

Si vous avez des coordonnées d'écran (par exemple, la position d'un curseur), vous pouvez récupérer un AutomationElement à l'aide de la méthode FromPoint statique.

À partir d'un handle de fenêtre

Pour récupérer un AutomationElement à partir d'une fenêtre HWND, utilisez la méthode FromHandle statique.

À partir du contrôle possédant le focus

Vous pouvez récupérer un AutomationElement qui représente le contrôle possédant le focus à partir de la propriété FocusedElement statique.

Voir aussi

Tâches

Rechercher un élément UI Automation basé sur une condition de propriété

Naviguer entre les éléments UI Automation avec TreeWalker

Concepts

Vue d'ensemble de l'arborescence UI Automation