Freigeben über


Abrufen von Benutzeroberflächenautomatisierungs-Elementen

HinweisHinweis

Diese Dokumentation ist für .NET Framework-Entwickler vorgesehen, die die verwalteten UI Automation-Klassen verwenden möchten, die im System.Windows.Automation-Namespace definiert sind.Aktuelle Informationen zu UI Automation finden Sie unter Windows Automation API: UI Automation.

In diesem Thema werden die verschiedenen Möglichkeiten zum Abrufen von AutomationElement-Objekten für user interface (UI)-Elemente beschrieben.

WarnhinweisVorsicht

Wenn die Clientanwendung nach Elementen der eigenen Benutzeroberfläche suchen kann, müssen alle UI Automation-Aufrufe in einem separaten Thread ausgeführt werden.Weitere Informationen finden Sie unter Threadingprobleme bei der Benutzeroberflächenautomatisierung.

Dieses Thema enthält folgende Abschnitte.

  • Stammelement
  • Bedingungen
  • Suchbereich
  • Suchen eines bekannten Elements
  • Suchen von Elementen in einer Teilstruktur
  • Durchlaufen einer Teilstruktur
  • Weitere Verfahren zum Abrufen eines Elements
  • Verwandte Abschnitte

Stammelement

Alle Suchvorgänge nach AutomationElement-Objekten benötigen einen Ausgangspunkt. Dies kann ein beliebiges Element sein, z. B. der Desktop, ein Anwendungsfenster oder ein Steuerelement.

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

WarnhinweisVorsicht

Im Allgemeinen sollten Sie nur direkt untergeordnete Elemente der RootElement-Eigenschaft abrufen.Eine Suche nach Nachfolgerelementen kann hunderte oder sogar tausende Elemente durchlaufen und möglicherweise einen Stapelüberlauf verursachen.Wenn ein bestimmtes Element auf einer niedrigeren Ebene abgerufen werden soll, sollten Sie die Suche im Anwendungsfenster oder in einem Container auf niedrigerer Ebene starten.

Bedingungen

Bei den meisten Verfahren zum Abrufen von UI Automation-Elementen muss eine Condition angegeben werden. Dies ist ein Satz von Kriterien, mit denen die abzurufenden Elemente definiert werden.

Die einfachste Bedingung ist TrueCondition. Dies ist ein vordefiniertes Objekt, das angibt, dass alle Elemente innerhalb des Suchbereichs zurückgegeben werden sollen. FalseCondition (das Gegenteil von TrueCondition) ist weniger nützlich, da diese Bedingung verhindert, dass irgendein Element gefunden wird.

Sie können drei weitere vordefinierte Bedingungen eigenständig oder in Kombination mit anderen Bedingungen verwenden: ContentViewCondition, ControlViewCondition und RawViewCondition. Eigenständig verwendet entspricht RawViewCondition der Bedingung TrueCondition, da Elemente nicht nach ihrer IsControlElement-Eigenschaft oder IsContentElement-Eigenschaft gefiltert werden.

Andere Bedingungen werden aus einem oder mehreren PropertyCondition-Objekten erstellt, die jeweils einen Eigenschaftswert angeben. Beispielsweise kann PropertyCondition angeben, dass ein Element aktiviert ist oder ein bestimmtes Steuerelementmuster unterstützt wird.

Bedingungen können durch das Erstellen von Objekten der Typen AndCondition, OrCondition und NotCondition mit boolescher Logik kombiniert werden.

Suchbereich

Für Suchvorgänge, die mithilfe von FindFirst oder FindAll ausgeführt werden, müssen Sie sowohl einen Bereich als auch einen Ausgangspunkt angeben.

Der Bereich definiert den Raum um den Ausgangspunkt, der durchsucht werden soll. Beispiele sind das Element selbst, die nebengeordneten Elemente, das übergeordnete Element, die Vorgängerelemente, direkt untergeordnete Elemente und die Nachfolgerelemente.

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

Suchen eines bekannten Elements

Ein bekanntes Element, das anhand von Name, AutomationId oder einer anderen Eigenschaft bzw. Kombination von Eigenschaften identifiziert wird, kann am einfachsten mit der FindFirst-Methode gefunden werden. Wenn das gesuchte Element ein Anwendungsfenster ist, kann der Ausgangspunkt der Suche die RootElement-Eigenschaft sein.

Dieses Verfahren zum Suchen nach UI Automation-Elementen ist in automatisierten Testszenarien sehr nützlich.

Suchen von Elementen in einer Teilstruktur

Um alle Elemente zu finden, die bestimmten Kriterien in Bezug auf ein bekanntes Element entsprechen, können Sie FindAll verwenden. Beispielsweise können Sie mit dieser Methode Listenelemente oder Menüelemente aus einer Liste bzw. einem Menü abrufen oder alle Steuerelemente in einem Dialogfeld identifizieren.

Durchlaufen einer Teilstruktur

Wenn Sie keine Vorkenntnisse über die Anwendungen besitzen, mit denen Ihr Client möglicherweise verwendet wird, können Sie mithilfe der TreeWalker-Klasse eine Teilstruktur aller relevanten Elemente erstellen. Dies kann von der Anwendung als Reaktion auf ein durch eine Fokusänderung ausgelöstes Ereignis ausgeführt werden. D. h., wenn eine Anwendung oder ein Steuerelement den Eingabefokus erhält, überprüft der Benutzeroberflächenautomatisierungs-Client die untergeordneten Elemente und möglicherweise alle Nachfolgerelemente des fokussierten Elements.

Eine weitere Verwendungsmöglichkeit für TreeWalker ist das Identifizieren der Vorgänger eines Elements. Beispielsweise können Sie das übergeordnete Fenster eines Steuerelements identifizieren, indem Sie die Struktur nach oben durchlaufen.

Sie können TreeWalker verwenden, indem Sie ein Objekt der Klasse erstellen (und dabei die relevanten Elemente durch Übergeben eines Condition-Objekts definieren) oder eines der folgenden vordefinierten Objekte verwenden, die als Felder von TreeWalker definiert sind.

ContentViewWalker

Sucht nur Elemente, deren IsContentElement-Eigenschaft true ist.

ControlViewWalker

Sucht nur Elemente, deren IsControlElement-Eigenschaft true ist.

RawViewWalker

Sucht alle Elemente.

Nach dem Abrufen von TreeWalker ist die weitere Verwendung einfach. Rufen Sie einfach die Get-Methoden auf, um durch die Elemente der Teilstruktur 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. Nehmen Sie beispielsweise an, dass Sie mit ContentViewWalker eine Ansicht einer Teilstruktur erstellt haben. Anschließend empfängt die Anwendung eine Benachrichtigung, dass eine Bildlaufleiste den Eingabefokus erhalten hat. Die Bildlaufleiste ist jedoch in der Ansicht der Teilstruktur nicht vorhanden, da sie kein Inhaltselement ist. Sie können das AutomationElement, das die Bildlaufleiste darstellt, jedoch an Normalize übergeben und den unmittelbaren Vorgänger in der Inhaltsansicht abrufen.

Weitere Verfahren zum Abrufen eines Elements

Zusätzlich zu Suchvorgängen und Navigation kann ein AutomationElement folgendermaßen abgerufen werden.

Aus einem Ereignis

Wenn die Anwendung ein UI Automation-Ereignis empfängt, ist das an den Ereignishandler übergebene Quellobjekt ein AutomationElement. Wenn Sie beispielsweise durch Fokusänderungen ausgelöste Ereignisse abonniert haben, wird das Element, das den Fokus erhalten hat, als Quelle an den AutomationFocusChangedEventHandler übergeben.

Weitere Informationen finden Sie unter Abonnieren von Benutzeroberflächenautomatisierungs-Ereignissen.

Über einen Punkt

Wenn Sie über Bildschirmkoordinaten (z. B. die Cursorposition) verfügen, können Sie ein AutomationElement mit der statischen FromPoint-Methode abrufen.

Aus einem Fensterhandle

Um ein AutomationElement aus einem HWND abzurufen, verwenden Sie die statische FromHandle-Methode.

Über das fokussierte Steuerelement

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

Siehe auch

Aufgaben

Suchen eines Benutzeroberflächenautomatisierungs-Elements anhand einer Eigenschaftenbedingung

Navigieren zwischen Benutzeroberflächenautomatisierungs-Elementen mit TreeWalker

Konzepte

Übersicht über die Benutzeroberflächenautomatisierungs-Struktur