Abrufen von Benutzeroberflächenautomatisierungs-Elementen

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

IUIAutomationElement wird in der Clientbeispiel-App für Benutzeroberflächenautomatisierung Dokumentinhaltverwendet.

Root-Element

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

Hinweis

Im Allgemeinen sollten Sie versuchen, nur direkte untergeordnete Elemente des Stammelements abzurufen. Eine Suche nach Nachfolgern kann Hunderte oder Tausende von Elementen durchlaufen. 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 verwenden, um Benutzeroberflächenautomatisierung Elemente abzurufen, müssen Sie eine Bedingung angeben. Eine Bedingung ist ein Satz von Kriterien, der die Elemente definiert, die Sie abrufen möchten. Eine Bedingung wird durch die IUIAutomationCondition-Schnittstelle dargestellt.

Die einfachste Bedingung ist die "true"-Bedingung. Dabei handelt es sich um ein vordefiniertes Objekt, das angibt, dass alle Elemente im Suchbereich zurückgegeben werden sollen. Die false-Bedingung ist die Umkehrung der true-Bedingung und ist weniger nützlich, da sie verhindern würde, dass Elemente gefunden werden. Sie können mit IUIAutomation::CreateTrueConditioneine Schnittstelle für die 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, ControlViewConditionund RawViewCondition. RawViewCondition, das selbst verwendet wird, entspricht der true-Bedingung, da elemente nicht nach den Eigenschaften IUIAutomationElement::CurrentIsControlElement oder CurrentIsContentElement gefiltert werden.

Andere Bedingungen werden aus Bedingungsobjekten erstellt, von denen jede einen Eigenschaftswert angibt. Eine Eigenschaftsbedingung kann beispielsweise 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, CreateNotConditionund verwandte Methoden aufgerufen werden.

Suchbereich

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

Hinweis

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

Der Bereich definiert den Bereich um den Startort, der durchsucht werden soll. Dies kann das Element selbst, seine gleichgeordneten Elemente, sein übergeordnetes Element, seine unmittelbar untergeordneten Elemente und seine Nachfolgerelemente einschließen. Beachten Sie, dass die Find-Methoden das Suchen der Microsoft Benutzeroberflächenautomatisierung-Struktur nicht unterstützen. Das heißt, die Suche nach übergeordneten Elementen wird nicht unterstützt.

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

Suchen nach einem bekannten Element

Um ein bekanntes Element zu finden, das anhand des Namens, der Automatisierungs-ID oder einer anderen Eigenschaft oder 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.

Diese Möglichkeit, Benutzeroberflächenautomatisierung Elemente zu finden, ist in automatisierten Testszenarien am nützlichsten.

Ein Codebeispiel, das zeigt, wie sie ein bekanntes Element finden, finden Sie unter Finding an Element by Name (Suchen eines Elements anhand des Namens).

Suchen nach Elementen in einer Unterstruktur

Um alle Elemente zu finden, die bestimmte Kriterien erfüllen und mit einem bekannten Element verknüpft sind, können Sie IUIAutomationElement::FindAll für das bekannte Element aufrufen. Verwenden Sie diese Methode beispielsweise, um Listenelemente oder Menüelemente aus einer Liste oder einem Menü abzurufen oder alle Steuerelemente in einem Dialogfeld zu identifizieren.

Ein Codebeispiel, das zeigt, wie Elemente in einer Unterstruktur gesucht werden, finden Sie unter Suchen verwandter Elemente.

Durchlaufen einer Unterstruktur

Wenn Sie keine Vorkenntnisse über die Anwendungen haben, mit denen Ihr Client verwendet werden kann, können Sie mithilfe von IUIAutomationTreeWalkereine Teilstruktur aller von Interesse seinden Elemente erstellen. Ihr Client kann dies z. B. als Reaktion auf ein Ereignis mit Fokusveränderung durchführen. Das heißt, wenn eine Anwendung oder ein Steuerelement den Eingabefokus erhält, untersucht der Benutzeroberflächenautomatisierung Client untergeordnete Elemente und möglicherweise alle Nachfolgerelemente des fokussierten Elements.

Beachten Sie, dass das Gehen der Benutzeroberflächenautomatisierung-Struktur ressourcenintensiv ist. Gehen Sie die Struktur nur dann durch, wenn es nicht möglich ist, die Methoden IUIAutomationElement::FindFirst, FindAlloder BuildUpdatedCache zu verwenden.

Sie können Ihren eigenen Baumwanderer definieren, indem Sie eine benutzerdefinierte Bedingung an IUIAutomation::CreateTreeWalkerübergeben, oder Sie können eines der folgenden vordefinierten Objekte verwenden, die als Eigenschaften der IUIAutomation-Basisdefiniert sind.

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

Nachdem Sie eine IUIAutomationTreeWalker-Methodeerhalten haben, rufen Sie die IUIAutomationTreeWalker::GetXxx-Methoden auf, um durch Elemente der Unterstruktur zu navigieren, und übergeben Sie das Element, von dem aus mit dem Gehen begonnen werden 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 eine Ansicht einer Unterstruktur mit IUIAutomation::ContentViewWalker. Ihre Anwendung erhält die Benachrichtigung, dass eine Bildlaufleiste 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 Bildlaufleiste darstellt, an IUIAutomationTreeWalker::Normalize übergeben und den nächstgelegenen Vorgänger in der Inhaltsansicht abrufen.

Codebeispiele, die die Verwendung der IUIAutomationTreeWalker-Schnittstelle einsehen, finden Sie unter How to Walk the Benutzeroberflächenautomatisierung Tree.

Weitere Möglichkeiten zum Abrufen eines Elements

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

Über ein Ereignis

Wenn Ihre Anwendung ein Benutzeroberflächenautomatisierung Ereignis empfängt, wird das an Ihren Ereignishandler übergebene Quellobjekt durch ein IUIAutomationElementdargestellt. Wenn Sie z. B. Ereignisse mit Fokusänderung abonnieren, ist die Quelle, die an IUIAutomationFocusChangedEventHandler übergeben wird, das Element, das den Fokus erhalten hat. Weitere Informationen finden Sie unter Abonnieren von Benutzeroberflächenautomatisierung Ereignissen.

Über einen Punkt

Verwenden Sie die IUIAutomation::ElementFromPoint-Methode, um ein IUIAutomationElement aus Bildschirmkoordinaten abzurufen, z. B. einer Cursorposition.

Über ein Fensterhandle

Um ein IUIAutomationElement aus einem HWND abzurufen, verwenden Sie die IUIAutomation::ElementFromHandle-Methode.

Über das Steuerelement mit Fokus

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

Übersicht über die Benutzeroberflächenautomatisierungs-Struktur

Beispiel-App für Benutzeroberflächenautomatisierung Dokumentinhaltsclient