Zwischenspeichern in Benutzeroberflächenautomatisierungs-Clients
Hinweis |
---|
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 wird das Zwischenspeichern von UI Automation-Eigenschaften und Steuerelementmustern erläutert.
Zwischenspeichern bedeutet bei der UI Automation, dass Daten vorab abgerufen werden. Auf die Daten kann dann ohne weitere prozessübergreifende Kommunikation zugegriffen werden. Das Zwischenspeichern wird normalerweise von Benutzeroberflächenautomatisierungs-Client-Anwendungen verwendet, um Eigenschaften und Steuerelementmuster in großen Mengen abzurufen. Informationen werden dann nach Bedarf aus dem Cache abgerufen. Der Cache wird von der Anwendung regelmäßig aktualisiert, normalerweise als Reaktion auf Ereignisse, die anzeigen, dass in der user interface (UI) eine Änderung stattgefunden hat.
Die Vorteile des Zwischenspeicherns kommen bei Windows Presentation Foundation (WPF)-Steuerelementen und benutzerdefinierten Steuerelementen, die über serverseitige Benutzeroberflächenautomatisierungs-Anbieter verfügen, am deutlichsten zum Tragen. Die Vorteile sind beim Zugriff auf clientseitige Anbieter, wie beispielsweise die Standardanbieter für Win32-Steuerelemente geringer.
Ein Zwischenspeichern findet statt, wenn die Anwendung ein CacheRequest aktiviert und anschließend eine beliebige Methode oder Eigenschaft verwendet, die ein AutomationElement zurückgibt, zum Beispiel FindFirst oder FindAll. Eine Ausnahme bilden die Methoden der TreeWalker-Klasse. Bei ihnen findet ein Zwischenspeichern nur statt, wenn als Parameter ein CacheRequest angegeben wird (zum Beispiel TreeWalker.GetFirstChild(AutomationElement, CacheRequest)).
Außerdem findet ein Zwischenspeichern statt, wenn Sie ein Ereignis abonnieren, während ein CacheRequest aktiv ist. Das als Quelle eines Ereignisses an Ihren Ereignishandler übergebene AutomationElement enthält die zwischengespeicherten Eigenschaften und Muster, die vom ursprünglichen CacheRequest angegebenen wurden. Jegliche Änderungen, die nach dem Abonnieren des Ereignisses an CacheRequest vorgenommen werden, haben keinen Einfluss.
Die UI Automation-Eigenschaften und Steuerelementmuster eines Elements können zwischengespeichert werden.
Dieses Thema enthält folgende Abschnitte.
- Optionen für das Zwischenspeichern
- Aktivieren von CacheRequest
- Abrufen von zwischengespeicherten Eigenschaften
- Abrufen von zwischengespeicherten Steuerelementmustern
- Abrufen von zwischengespeicherten untergeordneten und übergeordneten Elementen
- Aktualisieren des Caches
- Verwandte Abschnitte
Optionen für das Zwischenspeichern
CacheRequest legt die folgenden Optionen für das Zwischenspeichern fest.
Zwischenzuspeichernde Eigenschaften
Sie können zwischenzuspeichernde Eigenschaften festlegen, indem Sie vor dem Aktivieren der Anforderung für jede Eigenschaft Add(AutomationProperty) aufrufen.
Zwischenzuspeichernde Steuerelementmuster
Sie können zwischenzuspeichernde Steuerelementmuster festlegen, indem Sie vor dem Aktivieren der Anforderung für jedes Muster Add(AutomationPattern) aufrufen. Wenn ein Muster zwischengespeichert wird, werden dessen Eigenschaften nicht automatisch zwischengespeichert. Sie müssen die Eigenschaften, die zwischengespeichert werden sollen, mit CacheRequest.Add festlegen.
Umfang und Filtern des Zwischenspeicherns
Sie können die Elemente festlegen, deren Eigenschaften und Muster Sie zwischenspeichern möchten, indem Sie vor dem Aktivieren der Anforderung die CacheRequest.TreeScope-Eigenschaft festlegen. Der Umfang richtet sich nach den Elementen, die abgerufen werden, während die Anforderung aktiv ist. Wenn Sie beispielsweise nur Children festlegen und dann ein AutomationElement abrufen, werden die Eigenschaften und Muster der untergeordneten Elemente dieses Elements zwischengespeichert, nicht jedoch die des Elements selbst. Um sicherzustellen, dass das Zwischenspeichern für das abgerufene Element selbst durchgeführt wird, müssen Sie Element in der TreeScope-Eigenschaft einschließen. Der Bereich kann nicht auf Parent oder Ancestors festgelegt werden. Ein übergeordnetes Element kann jedoch zwischengespeichert werden, wenn ein untergeordnetes Element zwischengespeichert wird. Weitere Informationen finden Sie in diesem Thema unter "Abrufen von zwischengespeicherten untergeordneten und übergeordneten Elementen".
Der Umfang des Zwischenspeicherns wird auch von der CacheRequest.TreeFilter-Eigenschaft beeinflusst. In der Standardeinstellung werden nur Elemente zwischengespeichert, die in der Steuerelementansicht der UI Automation-Struktur angezeigt werden. Sie können diese Eigenschaft jedoch ändern, sodass alle Elemente oder nur in der Inhaltsansicht angezeigte Elemente zwischengespeichert werden.
Stärke der Elementverweise
Wenn Sie ein AutomationElement abrufen, können Sie standardmäßig auf alle Eigenschaften und Muster dieses Elements, einschließlich der nicht zwischengespeicherten, zugreifen. Um die Effizienz zu erhöhen, können Sie jedoch festlegen, dass sich der Verweis auf das Element nur auf zwischengespeicherte Daten bezieht, indem Sie die AutomationElementMode-Eigenschaft von CacheRequest auf None festlegen. In diesem Fall haben Sie keinen Zugriff auf nicht zwischengespeicherte Eigenschaften und Muster der abgerufenen Elemente. Dies bedeutet, dass Sie auf Eigenschaften nicht über GetCurrentPropertyValue oder die Current-Eigenschaft von AutomationElement bzw. anderer Steuerelementmuster zugreifen können. Sie können ein Muster auch nicht mit GetCurrentPattern oder TryGetCurrentPattern abrufen. Für zwischengespeicherte Muster können Sie Methoden aufrufen, die Arrayeigenschaften wie beispielsweise SelectionPattern.SelectionPatternInformation.GetSelection abrufen, jedoch keine Methoden, die Aktionen für das Steuerelement durchführen, zum Beispiel InvokePattern.Invoke.
Ein Beispiel für eine Anwendung, für die möglicherweise keine vollständigen Verweise auf Objekte erforderlich sind, ist eine Bildschirmsprachausgabe, die die Eigenschaften Name und ControlType von Elementen in einem Fenster vorab abruft, die AutomationElement-Objekte selbst jedoch nicht benötigt.
Aktivieren von CacheRequest
Ein Zwischenspeichern wird nur durchgeführt, wenn AutomationElement-Objekte abgerufen werden, während für den aktuellen Thread ein CacheRequest aktiv ist. Es gibt zwei Möglichkeiten, einen CacheRequest zu aktivieren.
Die übliche Methode besteht darin, Activate aufzurufen. Diese Methode gibt ein Objekt zurück, das IDisposable implementiert. Die Anforderung bleibt aktiv, solange das IDisposable-Objekt vorhanden ist. Am einfachsten können Sie die Lebensdauer des Objekts steuern, indem Sie den Aufruf in einen using-Block (C#) bzw. einen Using-Block (Visual Basic) einschließen. Dadurch wird sichergestellt, dass die Anforderung auch aus dem Stapel entfernt wird, wenn eine Ausnahme ausgelöst wird.
Wenn Sie Cacheanforderungen schachteln möchten, gibt es die weitere nützliche Möglichkeit, Push aufzurufen. Dadurch wird die Anforderung auf einem Stapel abgelegt und aktiviert. Die Anforderung bleibt aktiv, bis sie mit Pop aus dem Stapel entfernt wird. Die Anforderung wird vorübergehend inaktiv, wenn eine andere Anforderung auf dem Stapel abgelegt wird. Nur die oberste Anforderung auf dem Stapel ist aktiv.
Abrufen von zwischengespeicherten Eigenschaften
Sie können die zwischengespeicherten Eigenschaften eines Elements mithilfe der folgenden Methoden und Eigenschaften abrufen.
Wenn sich die angeforderte Eigenschaft nicht im Cache befindet, wird eine Ausnahme ausgelöst.
Cached macht wie Current einzelne Eigenschaften als Member einer Struktur verfügbar. Sie müssen diese Struktur jedoch nicht abrufen, Sie können auf die einzelnen Eigenschaften direkt zugreifen. Beispielsweise kann die Name-Eigenschaft über element.Cached.Name abgerufen werden. Hierbei steht element für ein AutomationElement.
Abrufen von zwischengespeicherten Steuerelementmustern
Sie können die zwischengespeicherten Steuerelementmuster eines Elements mit den folgenden Methoden abrufen.
Wenn sich das Muster nicht im Cache befindet, löst GetCachedPattern eine Ausnahme aus und TryGetCachedPattern gibt false zurück.
Sie können die zwischengespeicherten Eigenschaften eines Steuerelementmusters unter Verwendung der Cached-Eigenschaft des Musterobjekts abrufen. Außerdem können Sie über die Current-Eigenschaft die aktuellen Werte abrufen, jedoch nur, wenn None nicht beim Abrufen von AutomationElement angegeben wurde. (Der Standardwert ist Full. Hierbei ist der Zugriff auf die aktuellen Werte möglich.)
Abrufen von zwischengespeicherten untergeordneten und übergeordneten Elementen
Wenn Sie ein AutomationElement abrufen und mithilfe der TreeScope-Eigenschaft der Anforderung das Zwischenspeichern der untergeordneten Elemente dieses Elements anfordern, können Sie anschließend über die CachedChildren-Eigenschaft des von Ihnen abgerufenen Elements auf die untergeordneten Elemente zuzugreifen.
Wenn im Bereich der Cacheanforderung Element eingeschlossen wurde, ist das Stammelement der Anforderung anschließend über die CachedParent-Eigenschaft jedes untergeordneten Elements verfügbar.
Hinweis |
---|
Sie können keine übergeordneten Elemente des Stammelements der Anforderung zwischenspeichern. |
Aktualisieren des Caches
Der Cache ist nur gültig, solange sich in der UI nichts ändert. Ihre Anwendung ist, normalerweise als Reaktion auf Ereignisse, dafür verantwortlich, den Cache zu aktualisieren.
Wenn Sie ein Ereignis abonnieren, während ein CacheRequest aktiv ist, erhalten Sie bei jedem Aufruf Ihres Ereignishandlerdelegaten ein AutomationElement mit einem aktualisierten Cache als Quelle des Ereignisses. Sie können zwischengespeicherte Informationen für ein Element auch aktualisieren, indem Sie GetUpdatedCache aufrufen. Sie können den ursprünglichen CacheRequest übergeben, um alle Informationen zu aktualisieren, die vorher zwischengespeichert wurden.
Durch das Aktualisieren des Caches werden die Eigenschaften der vorhandenen AutomationElement-Verweise nicht geändert.
Siehe auch
Aufgaben
Verwenden der Zwischenspeicherung in der Benutzeroberflächenautomatisierung