Acquisition des éléments d'Interface Utilisateur Automation

Note

Cette documentation est destinée aux développeurs .NET Framework qui souhaitent utiliser les classes d'automatisation de l'interface utilisateur gérées définies dans le namespace System.Windows.Automation. Pour obtenir les dernières informations sur UI Automation, consultez API Windows Automation : UI Automation.

Cette rubrique décrit les différentes façons d’obtenir des objets pour les AutomationElement éléments d’interface utilisateur.

Avertissement

Si votre application cliente peut tenter 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 de gestion de threads UI Automation.

Élément racine

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

L’élément racine du bureau, à partir duquel tous les éléments sont décroissants, est obtenu à partir de la propriété statique AutomationElement.RootElement .

Avertissement

En général, vous devriez vous efforcer d'obtenir uniquement les enfants directs du RootElement. Une recherche de descendants peut itérer à travers des centaines ou même des milliers d’éléments, ce qui peut entraîner un dépassement de pile. Si vous tentez d’obtenir un élément spécifique à un niveau inférieur, vous devez démarrer votre recherche à partir de la fenêtre d’application ou d’un conteneur à un niveau inférieur.

Conditions

Pour la plupart des techniques que vous pouvez utiliser pour récupérer des éléments UI Automation, vous devez spécifier un Conditionensemble 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 l’étendue de recherche doivent être retournés. FalseCondition, l’inverse de TrueCondition, est moins utile, car il empêcherait tout élément d’être trouvé.

Trois autres conditions prédéfinies peuvent être utilisées seule ou en combinaison avec d’autres conditions : ContentViewCondition, ControlViewConditionet RawViewCondition. RawViewCondition, utilisé par lui-même, est équivalent à TrueCondition, car il ne filtre pas les éléments par leur IsControlElement ou IsContentElement leurs propriétés.

D’autres conditions sont générées à partir d’un ou plusieurs PropertyCondition objets, chacun spécifiant 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 combinées à l’aide de la logique booléenne en construisant des objets de types AndCondition, OrConditionet NotCondition.

Étendue de recherche

Les recherches effectuées à l’aide FindFirst ou FindAll doivent avoir une étendue ainsi qu’un emplacement de départ.

Le périmètre définit l'espace à explorer autour du point de départ. Cela peut inclure l’élément lui-même, ses frères, son parent, ses ancêtres, ses enfants immédiats et ses descendants.

L’étendue d’une recherche est définie par une combinaison de valeurs au niveau du bit de l’énumération TreeScope .

Recherche d’un élément connu

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

Cette façon de trouver des éléments UI Automation est la plus utile dans les scénarios de test automatisé.

Recherche d’éléments dans une sous-arborescence

Pour rechercher tous les éléments répondant à des critères spécifiques liés à un élément connu, vous pouvez utiliser FindAll. Par exemple, vous pouvez 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 pour identifier tous les contrôles d’une boîte de dialogue.

Parcours d’une sous-arborescence

Si vous n’avez aucune connaissance préalable des applications avec lesquelles votre client peut être utilisé, vous pouvez construire une sous-arborescence de tous les éléments intéressants à l’aide de la TreeWalker classe. Votre application peut effectuer cette opération en réponse à un événement modifié par le focus ; autrement dit, lorsqu’une application ou un contrôle reçoit le focus d’entrée, le client UI Automation examine les enfants et peut-être tous les descendants de l’élément ciblé.

Une autre façon d’utiliser TreeWalker consiste à 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 soit en créant un objet de la classe (définissant les éléments d’intérêt en passant un Condition), soit en utilisant l’un des objets prédéfinis suivants définis en tant que champs TreeWalker.

Terrain Description
ContentViewWalker Recherche uniquement les éléments dont IsContentElement la propriété est true.
ControlViewWalker Recherche uniquement les éléments dont IsControlElement la propriété est true.
RawViewWalker Recherche tous les éléments.

Une fois que vous avez obtenu un TreeWalker, l’utilisation est simple. Appelez simplement les Get méthodes pour naviguer entre les éléments de la sous-arborescence.

La méthode Normalize peut être utilisée pour naviguer vers un élément dans la sous-arborescence depuis un autre élément qui n'appartient pas à la vue. Par exemple, supposons que vous avez créé une vue d'une sous-arborescence à l'aide de ContentViewWalker. Votre application reçoit ensuite une notification indiquant 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 votre vue de la sous-arborescence. Toutefois, vous pouvez passer le AutomationElement, qui représente la barre de défilement, à Normalize et récupérer l’ancêtre le plus proche se trouvant dans la vue de 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 élément AutomationElement de la manière suivante.

À partir d’un événement

Lorsque votre application reçoit un événement UI Automation, l’objet source transmis à votre gestionnaire d’événements est un AutomationElement. Par exemple, si vous avez souscrit aux événements de changement de focus, la source transmise à votre AutomationFocusChangedEventHandler est l’élément qui a reçu le focus.

Pour plus d’informations, consultez S’abonner aux événements UI Automation.

À partir d’un point

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

À partir d’un descripteur de fenêtre

Pour récupérer un AutomationElement à partir d’un HWND, utilisez la méthode statique FromHandle.

À partir du contrôle focalisé

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

Voir également