Freigeben über


Abrufen von UI-Automatisierungselementen

Hinweis

Diese Dokumentation richtet sich an .NET Framework-Entwickler, die die verwalteten Benutzeroberflächenautomatisierungs-Klassen verwenden möchten, die im System.Windows.Automation-Namespace definiert sind. Die neuesten Informationen zur Benutzeroberflächenautomatisierung finden Sie unter Der Windows-Automatisierungs-API: Benutzeroberflächenautomatisierung.

In diesem Thema werden die verschiedenen Methoden zur Gewinnung von AutomationElement-Objekten für Benutzeroberflächenelemente beschrieben.

Vorsicht

Wenn Ihre Clientanwendung möglicherweise versucht, Elemente in einer eigenen Benutzeroberfläche zu finden, müssen Sie alle Benutzeroberflächenautomatisierungsaufrufe in einem separaten Thread ausführen. Weitere Informationen finden Sie unter Threadingprobleme bei der Benutzeroberflächenautomatisierung.

Stammelement

Alle Suchvorgänge für AutomationElement Objekte müssen einen Ausgangspunkt haben. Dies kann ein beliebiges Element sein, einschließlich des Desktops, eines Anwendungsfensters oder eines Steuerelements.

Das Stammelement für den Desktop, von dem alle Elemente absteigen, wird aus der statischen AutomationElement.RootElement Eigenschaft abgerufen.

Vorsicht

Im Allgemeinen sollten Sie darauf achten, nur direkte untergeordnete Elemente von RootElement zu erhalten. Eine Suche nach Nachfolgern kann hunderte oder sogar Tausende von Elementen durchlaufen, was möglicherweise zu einem Stapelüberlauf führt. Wenn Sie versuchen, ein bestimmtes Element auf einer niedrigeren Ebene abzurufen, sollten Sie die Suche über das Anwendungsfenster oder von einem Container auf einer niedrigeren Ebene starten.

Conditions

Für die meisten Techniken können Sie UI-Automatisierungs-Elemente abrufen. Dabei müssen Sie ein Condition angeben, das eine Gruppe von Kriterien ist, die definieren, welche Elemente abgerufen werden sollen.

Die einfachste Bedingung ist TrueConditionein vordefiniertes Objekt, das angibt, dass alle Elemente innerhalb des Suchbereichs zurückgegeben werden sollen. FalseCondition, das Gegenteil von TrueCondition, ist weniger nützlich, da es verhindern würde, dass Elemente gefunden werden.

Drei weitere vordefinierte Bedingungen können allein oder in Kombination mit anderen Bedingungen verwendet werden: ContentViewCondition, , ControlViewConditionund RawViewCondition. RawViewCondition, für sich selbst verwendet, ist gleich TrueCondition, da es keine Elemente nach ihren IsControlElement- oder IsContentElement-Eigenschaften filtert.

Andere Bedingungen werden aus einem oder PropertyCondition mehreren Objekten erstellt, von denen jeder einen Eigenschaftswert angibt. Beispielsweise kann ein PropertyCondition Element angeben, dass das Element aktiviert ist oder dass es ein bestimmtes Steuerelementmuster unterstützt.

Bedingungen können mit boolescher Logik kombiniert werden, indem Objekte von Typen AndCondition, OrCondition und NotCondition.

Suchbereich

Suchvorgänge, die mithilfe von FindFirst oder FindAll durchgeführt werden, müssen einen Bereich sowie einen Ausgangspunkt haben.

Der Umfang definiert den Suchbereich um den Ausgangspunkt, der durchsucht werden soll. Dies kann das Element selbst, seine Geschwister, sein übergeordnetes Element, seine Vorfahren, seine unmittelbaren Kinder und seine Nachkommen umfassen.

Der Bereich einer Suche wird durch eine bitweise Kombination von Werten aus der TreeScope Enumeration definiert.

Suchen eines bekannten Elements

Um ein bekanntes Element zu finden, das durch seine Name, AutomationIdoder eine andere Eigenschaft oder eine andere Kombination von Eigenschaften identifiziert wird, ist es am einfachsten, die FindFirst Methode zu verwenden. Wenn das gesuchte Element ein Anwendungsfenster ist, kann der Ausgangspunkt für die Suche der RootElement sein.

Diese Möglichkeit, Benutzeroberflächenautomatisierungs-Elemente zu finden, ist bei automatisierten Testszenarien am nützlichsten.

Suchen von Elementen in einem Teilbaum

Um alle Elemente zu finden, die bestimmte Kriterien erfüllen, die mit einem bekannten Element zusammenhängen, können Sie verwenden FindAll. Sie können z. B. diese Methode verwenden, um Listenelemente oder Menüelemente aus einer Liste oder einem Menü abzurufen, oder um alle Steuerelemente in einem Dialogfeld zu identifizieren.

Durchlaufen einer Unterstruktur

Wenn Sie keine Kenntnisse über die Anwendungen haben, mit denen Ihr Client verwendet werden kann, können Sie mithilfe der TreeWalker Klasse eine Unterstruktur aller interessanten Elemente erstellen. Ihre Anwendung kann dies als Reaktion auf ein Fokusänderungsereignis tun; das heißt, wenn eine Anwendung oder ein Steuerelement den Eingabefokus erhält, untersucht der UI-Automatisierungs-Client untergeordnete und möglicherweise alle abgeleiteten Elemente des fokussierten Elements.

Eine weitere Möglichkeit, wie TreeWalker verwendet werden kann, besteht darin, die Vorgänger eines Elements zu identifizieren. Indem Sie im Baum nach oben navigieren, können Sie beispielsweise das übergeordnete Fenster eines Steuerelements identifizieren.

Sie können TreeWalker entweder ein Objekt der Klasse erstellen, indem Sie die Elemente von Interesse durch die Übergabe eines Condition definieren, oder indem Sie eines der folgenden vordefinierten Objekte verwenden, die als Felder von TreeWalker definiert sind.

Feld Beschreibung
ContentViewWalker Sucht nur Elemente, deren IsContentElement Eigenschaft lautet true.
ControlViewWalker Sucht nur Elemente, deren IsControlElement Eigenschaft lautet true.
RawViewWalker Sucht alle Elemente.

Nachdem Sie eine TreeWalker erhalten haben, ist die Verwendung einfach. Rufen Sie einfach die Get Methoden auf, um zwischen Elementen der Unterstruktur zu navigieren.

Die Normalize-Methode kann verwendet werden, um von einem Element, das nicht Teil der Ansicht ist, zu einem Element in der Unterstruktur zu navigieren. Angenommen, Sie haben mithilfe von ContentViewWalker eine Ansicht einer Unterstruktur erstellt. Ihre Anwendung erhält dann eine Benachrichtigung darüber, dass eine Bildlaufleiste den Eingabefokus bekommen hat. Da es sich bei einer Bildlaufleiste nicht um ein Inhaltselement handelt, ist sie nicht in der Ansicht des Teilbaums vorhanden. Sie können jedoch die AutomationElement-Bildlaufleiste an Normalize übergeben und den nächstgelegenen Vorfahren abrufen, der sich in der Inhaltsansicht befindet.

Andere Möglichkeiten zum Abrufen eines Elements

Zusätzlich zu Suchvorgängen und Navigationen können Sie eine AutomationElement auf die folgende Weise abrufen.

Aus einem Ereignis

Wenn Ihre Anwendung ein Benutzeroberflächenautomatisierungs-Ereignis empfängt, ist das an den Ereignishandler übergebene Quellobjekt ein AutomationElement. Wenn Sie beispielsweise Fokusänderungsereignisse abonniert haben, ist die an Ihre AutomationFocusChangedEventHandler Quelle übergebene Element das Element, das den Fokus erhalten hat.

Weitere Informationen finden Sie unter Abonnieren von Benutzeroberflächenautomatisierungsereignissen.

Von einem Punkt

Wenn Sie Über Bildschirmkoordinaten verfügen (z. B. eine Cursorposition), können Sie eine AutomationElement mithilfe der statischen FromPoint Methode abrufen.

Von einem Fenstergriff

Verwenden Sie zum Abrufen eines HWND-Elements AutomationElement die statische FromHandle Methode.

Vom fokussierten Steuerelement

Sie können ein AutomationElement-Steuerelement abrufen, das das fokussierte Steuerelement aus der statischen FocusedElement-Eigenschaft darstellt.

Siehe auch