Obtention d'éléments UI Automation
Notes
Cette documentation s’adresse aux développeurs .NET Framework qui souhaitent utiliser les classes UI Automation managées définies dans l’espace de noms 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 AutomationElement pour les éléments d’IU (interface utilisateur).
Attention
Si votre application cliente tente de rechercher 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 UI Automation Threading Issues.
Élément racine
Toutes les recherches d’objets AutomationElement doivent avoir un point de départ. Cela 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 proviennent, est obtenu à partir de la propriété AutomationElement.RootElement statique.
Attention
En général, vous devez essayer d’obtenir uniquement les enfants directs de 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 de niveau inférieur, vous devez commencer votre recherche à partir de la fenêtre d’application ou d’un conteneur de niveau inférieur.
Conditions
Pour la plupart des techniques qui vous permettent de récupérer des éléments UI Automation, vous devez spécifier Condition, qui est un ensemble de critères définissant les éléments à récupérer.
La condition la plus simple est TrueCondition, un objet prédéfini spécifiant que tous les éléments dans la zone de recherche doivent être retournés. La conditionFalseCondition, inverse de TrueCondition, est moins utile, car elle empêche certains éléments d’être recherchés.
Trois autres conditions prédéfinies peuvent être utilisées seules ou combinées à d’autres conditions : ContentViewCondition, ControlViewConditionet RawViewCondition. La condition, utilisée par elle-même, est équivalente à , car elle ne filtre pas les éléments par leurs propriétés ou .
D’autres conditions sont développées à partir d’un ou plusieurs objets PropertyCondition , chacun spécifiant une valeur de propriété. Par exemple, une condition 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 d’une logique booléenne en construisant des objets de types AndCondition, OrConditionet NotCondition.
Étendue de recherche
Les recherches effectuées à l’aide de FindFirst ou FindAll doivent avoir une étendue et un point de départ.
L’étendue définit l’espace autour du point de départ dans lequel doit avoir lieu la recherche. 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 sa propriété Name, AutomationIdou 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 RootElement.
Cette façon de rechercher des éléments UI Automation est très 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 d’une liste ou d’un menu, ou pour identifier tous les contrôles d’une boîte de dialogue.
Parcourir une sous-arborescence
Si vous ne connaissez pas au préalable les applications avec lesquelles votre client peut être utilisé, vous pouvez construire une sous-arborescence de tous les éléments d’intérêt à l’aide de la classe TreeWalker . Votre application peut le faire en réponse à un événement de modification de focus, c’est-à-dire, quand 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 ayant le focus.
Une autre façon 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 (qui définit les éléments d’intérêt en passant une condition Condition), ou à l’aide de l’un des objets prédéfinis suivants, définis en tant que champs de TreeWalker.
Champ | Description |
---|---|
ContentViewWalker | Recherche uniquement les éléments dont la propriété IsContentElement est true . |
ControlViewWalker | Recherche uniquement les éléments dont la propriété IsControlElement est true . |
RawViewWalker | Recherche tous les éléments. |
Une fois que vous avez obtenu un TreeWalker, son utilisation est simple. Appelez simplement les méthodes Get
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 à partir d’un autre élément qui ne fait pas partie de l’affichage. Par exemple, supposons que vous avez créé un affichage d’une sous-arborescence à l’aide de ContentViewWalker. Votre application reçoit une notification l’informant qu’une barre de défilement a reçu le focus d’entrée. Comme une barre de défilement n’est pas un élément de contenu, elle n’est pas présente dans l’affichage de la sous-arborescence. Toutefois, vous pouvez passer AutomationElement qui représente la barre de défilement à Normalize et récupérer l’ancêtre le plus proche qui se trouve dans l’affichage de contenu.
Autres moyens de récupérer un élément
Outre les recherches et la navigation, vous pouvez récupérer un AutomationElement des façons suivantes.
À partir d’un événement
Quand 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 êtes abonné à des événements de changement de focus, la source passée à votre AutomationFocusChangedEventHandler est l’élément qui a reçu le focus.
Pour plus d'informations, consultez Subscribe to UI Automation Events.
À partir d’un point
Si vous disposez de coordonnées d’écran (par exemple, la position d’un curseur), vous pouvez récupérer un AutomationElement à l’aide de la méthode statique FromPoint .
À partir d’un handle de fenêtre
Pour récupérer un AutomationElement à partir d’un HWND, utilisez la méthode statique FromHandle .
À partir du contrôle ayant le focus
Vous pouvez récupérer un AutomationElement qui représente le contrôle ayant le focus à partir de la propriété statique FocusedElement .