Abrufen von Benutzeroberflächenautomatisierungs-Elementen

In diesem Artikel werden verschiedene Möglichkeiten zum Abrufen von IUIAutomationElement-Schnittstellen für Benutzeroberflächenelemente beschrieben.

IUIAutomationElement wird in der Clientbeispiel-App für Benutzeroberflächenautomatisierungs-Dokumentinhalte verwendet.

Root-Element

Obwohl Elemente direkt mithilfe von Methoden wie IUIAutomation::GetFocusedElement abgerufen werden können, benötigen einige Clientanwendungen eine Ansicht der hierarchischen Struktur von Elementen, die als Benutzeroberflächenautomatisierungs-Baum bezeichnet wird. Das Stammelement dieser Hierarchie ist der Desktop. Sie können dieses Element mithilfe der IUIAutomation::GetRootElement- oder der IUIAutomation::GetRootElementBuildCache-Methode abrufen. Beide Methoden rufen einen IUIAutomationElement-Schnittstellenzeiger ab. Mithilfe von Methoden wie IUIAutomationElement::FindFirst und FindAll können Sie nach Nachfolgerelementen suchen.

Hinweis

Im Allgemeinen sollten Sie versuchen, nur direkte untergeordnete Elemente des Stammelements abzurufen. Bei der Suche nach Nachfolgern können Hunderte oder Tausende von Elementen durchlaufen werden. 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

Für die meisten Techniken, die Sie zum Abrufen von Benutzeroberflächenautomatisierungs-Elementen verwenden, müssen Sie eine Bedingung angeben. Eine Bedingung entspricht einer Reihe von Kriterien, die die Elemente definieren, die Sie abrufen möchten. Eine Bedingung wird durch die IUIAutomationCondition-Schnittstelle dargestellt.

Die einfachste Bedingung ist die true-Bedingung, bei der es sich um ein vordefiniertes Objekt handelt, das angibt, dass alle Elemente im Suchbereich zurückgegeben werden sollen. Die false-Bedingung ist das Gegenteil der true-Bedingung und weniger nützlich, da sie verhindern würde, dass Elemente gefunden werden. Mithilfe von IUIAutomation::CreateTrueCondition können Sie eine Schnittstelle zur true-Bedingung abrufen.

Drei weitere vordefinierte Bedingungen, die als Eigenschaften für das IUIAutomation-Objekt verfügbar sind, können allein oder in Kombination mit anderen Bedingungen verwendet werden: IUIAutomation::ContentViewCondition, ControlViewCondition und RawViewCondition. RawViewCondition selbst entspricht der true-Bedingung, da diese Bedingung keine Elemente nach den Eigenschaften IUIAutomationElement::CurrentIsControlElement oder CurrentIsContentElement-Eigenschaften filtert.

Andere Bedingungen werden aus Bedingungsobjekten erstellt, von denen jedes einen Eigenschaftswert angibt. Beispielsweise kann eine Eigenschaftsbedingung angeben, dass das Element aktiviert ist oder ein bestimmtes Steuerelementmuster unterstützt.

Bedingungen, die boolesche Logik verwenden, können kombiniert werden, indem IUIAutomation::CreateAndCondition, CreateOrCondition, CreateNotCondition und verwandte Methoden aufgerufen werden.

Suchbereich

Suchvorgänge, die mithilfe von IUIAutomationElement::FindFirst oder FindAll ausgeführt werden, müssen einen Bereich und einen Ausgangspunkt aufweisen.

Hinweis

Alle Kommentare zu diesen beiden Methoden gelten auch für IUIAutomationElement::FindFirstBuildCache und FindAllBuildCache.

 

Der Bereich definiert den Bereich um den Ausgangspunkt, der durchsucht werden soll. Dies kann das Element selbst, seine gleichgeordneten Elemente, sein übergeordnetes Element, seine unmittelbar untergeordneten Elemente und seine Nachfolger umfassen. Beachten Sie, dass die Find-Methoden das Durchsuchen des Microsoft-Benutzeroberflächenautomatisierungs-Baums nicht unterstützen. Dies bedeutet, dass die Suche nach Vorgängerelementen nicht unterstützt wird.

Der Bereich einer Suche wird durch eine bitweise Kombination von Werten des TreeScope-Enumerationstyps definiert.

Suchen nach einem bekannten Element

Um nach einem bekannten Element zu suchen, das anhand des Namens, der Automatisierungs-ID, einer anderen Eigenschaft oder einer Kombination von Eigenschaften identifiziert wird, ist es am einfachsten, die IUIAutomationElement::FindFirst-Methode zu verwenden. Wenn das gesuchte Element ein Anwendungsfenster ist, kann der Ausgangspunkt der Suche das Stammelement sein.

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

Ein Codebeispiel, das veranschaulicht, wie Sie ein bekanntes Element suchen können, finden Sie unter Suchen eines Elements anhand des Namens.

Suchen nach Elementen in einer Unterstruktur

Um alle Elemente zu finden, die bestimmten Kriterien entsprechen und mit einem bekannten Element zusammenhängen, können Sie IUIAutomationElement::FindAll für das bekannte Element aufrufen. Verwenden Sie diese Methode beispielsweise, um Listen- oder Menüelemente aus einer Liste bzw. einem Menü abzurufen oder alle Steuerelemente in einem Dialogfeld zu identifizieren.

Ein Codebeispiel zur Veranschaulichung der Suche nach Elementen in einer Unterstruktur finden Sie unter Suchen nach zusammenhängenden Elementen.

Durchlaufen einer Unterstruktur

Wenn Sie über keine Kenntnisse im Zusammenhang mit den Anwendungen verfügen, mit denen Ihr Client verwendet werden kann, können Sie mithilfe von IUIAutomationTreeWalker eine Unterstruktur aller relevanten Elemente erstellen. Ihr Client kann diesen Schritt beispielsweise als Reaktion auf ein Fokusänderungsereignis ausführen. Wenn eine Anwendung oder ein Steuerelement also den Eingabefokus erhält, untersucht der Benutzeroberflächenautomatisierungs-Client untergeordnete Elemente und möglicherweise alle Nachfolger des fokussierten Elements.

Beachten Sie, dass das Durchsuchen des Benutzeroberflächenautomatisierungs-Baums ressourcenintensiv ist. Durchsuchen Sie die Struktur nur dann, wenn es nicht möglich ist, die Methoden IUIAutomationElement::FindFirst, FindAll oder BuildUpdatedCache zu verwenden.

Sie können Ihren eigenen Baumdurchsuchungsvorgang definieren, indem Sie eine benutzerdefinierte Bedingung an IUIAutomation::CreateTreeWalker übergeben. Alternativ können Sie eines der folgenden vordefinierten Objekte verwenden, die als Eigenschaften der Basis IUIAutomation definiert sind.

Object Purpose
ContentViewWalker Dieses Objekt sucht nur Elemente, deren IUIAutomationElement::CurrentIsContentElement-Eigenschaft TRUE ist.
ControlViewWalker Dieses Objekt sucht nur Elemente, deren IUIAutomationElement::CurrentIsControlElement-Eigenschaft TRUE ist.
RawViewWalker Sucht nach allen Elementen.

 

Rufen Sie nach dem Abrufen von IUIAutomationTreeWalker die IUIAutomationTreeWalker::GetXxx-Methoden auf, um in den Elementen der Unterstruktur zu navigieren, und übergeben Sie das Element, das den Ausgangspunkt darstellen soll.

Die IUIAutomationTreeWalker::Normalize-Methode kann zum Navigieren zu einem Element in der Unterstruktur aus einem anderen Element verwendet werden, das nicht Teil der Ansicht ist. Angenommen, Sie erstellen mithilfe von IUIAutomation::ContentViewWalker eine Ansicht einer Unterstruktur. Ihre Anwendung empfängt 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 jedoch das IUIAutomationElement, das die Scrollleiste darstellt, an IUIAutomationTreeWalker::Normalize übergeben und den nächstgelegenen Vorgänger in der Inhaltsansicht abrufen.

Codebeispiele, die veranschaulichen, wie Sie die IUIAutomationTreeWalker-Schnittstelle verwenden, finden Sie unter Durchsuchen des Benutzeroberflächenautomatisierungs-Baums.

Weitere Möglichkeiten zum Abrufen eines Elements

Zusätzlich zu Suchvorgängen und der Navigation können Sie ein IUIAutomationElement auf folgende Weise abrufen.

Über ein Ereignis

Wenn Ihre Anwendung ein Benutzeroberflächenautomatisierungs-Ereignis empfängt, wird das an den Ereignishandler übergebene Quellobjekt durch ein IUIAutomationElement dargestellt. Wenn Sie beispielsweise Fokusänderungsereignisse abonnieren, ist die an den IUIAutomationFocusChangedEventHandler übergebene Quelle das Element, das den Fokus erhalten hat. Weitere Informationen finden Sie unter Abonnieren von Benutzeroberflächenautomatisierungs-Ereignissen.

Über einen Punkt

Verwenden Sie die IUIAutomation::ElementFromPoint-Methode, um ein IUIAutomationElement über Bildschirmkoordinaten abzurufen (z. B. eine Cursorposition).

Über ein Fensterhandle

Verwenden Sie die IUIAutomation::ElementFromHandle-Methode, um ein IUIAutomationElement über ein HWND abzurufen.

Über das Steuerelement mit Fokus

Verwenden Sie die IUIAutomation::GetFocusedElement-Methode, um ein IUIAutomationElement abzurufen, das das fokussierte Steuerelement darstellt.

Übersicht über die Benutzeroberflächenautomatisierungs-Struktur

Clientbeispiel-App für Benutzeroberflächenautomatisierungs-Dokumentinhalte