Abrufen von Benutzeroberflächenautomatisierungs-Elementen

Hinweis

Diese Dokumentation ist für .NET Framework-Entwickler konzipiert, die die verwalteten Klassen zur Automatisierung der Benutzeroberfläche verwenden möchten, die im Namespace System.Windows.Automation definiert sind. Aktuelle Informationen zur Automatisierung der Benutzeroberfläche finden Sie auf der Seite zur Windows-Automatisierungs-API: Benutzeroberflächenautomatisierung.

In diesem Thema werden die verschiedenen Möglichkeiten zum Abrufen von AutomationElement-Objekten für Benutzeroberflächenelemente beschrieben.

Achtung

Wenn Ihre Clientanwendung nach Elementen in ihrer eigenen Benutzeroberfläche suchen kann, müssen alle Benutzeroberflächenautomatisierungs-Aufrufe in einem separaten Thread ausgeführt werden. Weitere Informationen finden Sie unter UI Automation Threading Issues.

Root-Element

Für jede Suche nach AutomationElement -Objekten ist ein Ausgangspunkt erforderlich. Dies kann ein beliebiges Element sein, z. B. der Desktop, ein Anwendungsfenster oder ein Steuerelement.

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

Achtung

Grundsätzlich sollten Sie nur versuchen, direkt untergeordnete Elemente des Elements abzurufen, das von der RootElement-Eigenschaft angegeben wird. Eine Suche nach Nachfolgerelementen kann hunderte oder sogar tausende Elemente durchlaufen und möglicherweise einen Stapelüberlauf verursachen. Wenn Sie versuchen, ein bestimmtes Element auf einer niedrigeren Ebene abzurufen, sollten Sie die Suche aus dem Anwendungsfenster oder aus einem Container auf niedrigerer Ebene starten.

Bedingungen

In den meisten Verfahren, die zum Abrufen von Benutzeroberflächenautomatisierungs-Elementen verwendet werden können, müssen Sie eine Condition angeben, die Kriterien umfasst, mit denen definiert wird, welche Elemente abgerufen werden sollen.

Die einfachste Bedingung ist TrueCondition. Dies ist ein vordefiniertes Objekt, das angibt, dass alle im Suchbereich befindlichen Elemente 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 jeweils eigenständig oder in Kombination mit anderen Bedingungen verwenden: ContentViewCondition, ControlViewConditionund RawViewCondition. Eigenständig verwendet entsprichtder Bedingung , da Elemente hierbei nicht nach ihrer -Eigenschaft oder -Eigenschaft gefiltert werden.

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

Bedingungen können über boolesche Logik kombiniert werden, indem Objekte des Typs AndCondition, OrConditionoder NotConditionerstellt werden.

Suchbereich

Für Suchvorgänge, die mit FindFirst oder FindAll ausgeführt werden, sind sowohl ein Bereich als auch ein Ausgangspunkt erforderlich.

Der Bereich definiert den zu durchsuchenden Raum um den Ausgangspunkt. Beispiele sind das Element selbst sowie die gleichgeordneten Elemente, das übergeordnete Element, die Vorgängerelemente, die direkt untergeordneten Elemente und die Nachfolgerelemente des Elements.

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

Suchen nach einem bekannten Element

Ein bekanntes Element, das durch seine Name-, AutomationId- oder eine andere Eigenschaft bzw. ein Kombination von Eigenschaften gekennzeichnet ist, lässt sich am einfachsten mit der FindFirst -Methode finden. Wenn das gesuchte Element ein Anwendungsfenster ist, kann der Ausgangspunkt der Suche die RootElement-Eigenschaft sein.

Dieses Verfahren zum Suchen nach Benutzeroberflächenautomatisierungs-Elementen ist in Szenarien für automatisierte Tests am nützlichsten.

Suchen nach Elementen in einer Unterstruktur

Um alle Elemente zu finden, die bestimmten Kriterien in Bezug auf ein bekanntes Element entsprechen, können Sie FindAllverwenden. Beispielsweise könnten Sie diese Methode verwenden, um Listenelemente oder Menüelemente aus einer Liste bzw. einem Menü abzurufen oder alle Steuerelemente in einem Dialogfeld zu ermitteln.

Durchlaufen einer Unterstruktur

Wenn Sie nichts über die Anwendungen wissen, mit denen Ihr Client möglicherweise verwendet wird, können Sie über die TreeWalker -Klasse eine Unterstruktur aller relevanten Elemente erstellen. Dies kann in Ihrer Anwendung als Reaktion auf ein Ereignis erfolgen, das durch eine Fokusänderung ausgelöst wurde. Das heißt, 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 Elements mit Fokus.

Eine weitere Verwendungsmöglichkeit für TreeWalker besteht darin, die Vorgänger eines Elements zu ermitteln. Beispielsweise können Sie das übergeordnete Fenster eines Steuerelements ermitteln, indem Sie die Struktur nach oben durchlaufen.

Sie können TreeWalker verwenden, indem Sie entweder 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 TreeWalkerdefiniert sind.

Feld BESCHREIBUNG
ContentViewWalker Sucht nur nach Elementen, deren IsContentElement -Eigenschaft gleich trueist.
ControlViewWalker Sucht nur nach Elementen, deren IsControlElement -Eigenschaft gleich trueist.
RawViewWalker Sucht nach allen Elementen.

Nachdem Sie ein TreeWalker-Objekt abgerufen haben, ist dessen Verwendung unkompliziert. Rufen Sie einfach die Get -Methoden auf, um durch die Elemente 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. Nehmen Sie beispielsweise an, dass Sie mit ContentViewWalkereine Ansicht einer Unterstruktur erstellt haben. Ihre Anwendung empfängt dann eine Benachrichtigung, dass eine Scrollleiste den Eingabefokus erhalten hat. Weil eine Scrolllaufleiste aber kein Inhaltselement ist, fehlt sie in Ihrer Ansicht der Unterstruktur. Sie können das AutomationElement , das die Scrolllaufleiste darstellt, jedoch an Normalize übergeben und den unmittelbaren Vorgänger in der Inhaltsansicht abrufen.

Weitere Möglichkeiten zum Abrufen eines Elements

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

Über ein Ereignis

Wenn Ihre Anwendung ein Benutzeroberflächenautomatisierungs-Ereignis empfängt, ist das an Ihren Ereignishandler übergebene Quellobjekt ein AutomationElement. Wenn Sie beispielsweise Ereignisse abonniert haben, die durch Fokusänderung ausgelöst werden, wird das Element, das den Fokus erhalten hat, als Quelle an Ihren AutomationFocusChangedEventHandler übergeben.

Weitere Informationen finden Sie unter Subscribe to UI Automation Events.

Über einen Punkt

Wenn Sie über Bildschirmkoordinaten (beispielsweise die Cursorposition) verfügen, können Sie ein AutomationElement abrufen, indem Sie die statische FromPoint -Methode verwenden.

Über ein Fensterhandle

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

Über das Steuerelement mit Fokus

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

Siehe auch