Ottenere elementi di automazione interfaccia utente

Questo argomento descrive vari modi per ottenere le interfacce IUIAutomationElement per gli elementi dell'interfaccia utente.

IUIAutomationElement viene usato nell'app di esempio client del contenuto del documento Automazione interfaccia utente.

Elemento radice

Sebbene gli elementi possano essere recuperati direttamente usando metodi, ad esempio IUIAutomation::GetFocusedElement, alcune applicazioni client richiedono una visualizzazione della struttura gerarchica degli elementi, nota come albero Automazione interfaccia utente. L'elemento radice di questa gerarchia è il desktop. È possibile ottenere questo elemento usando il metodo IUIAutomation::GetRootElement o il metodo IUIAutomation::GetRootElementBuildCache. Entrambi questi metodi recuperano un puntatore all'interfaccia IUIAutomationElement. È possibile cercare elementi discendenti usando metodi quali IUIAutomationElement::FindFirst e FindAll.

Nota

In generale, è consigliabile provare a ottenere solo elementi figlio diretti dell'elemento radice. Una ricerca di discendenti può scorrere centinaia o migliaia di elementi. Per ottenere un elemento specifico a un livello inferiore, è consigliabile avviare la ricerca dalla finestra dell'applicazione o da un contenitore a un livello inferiore.

 

Condizioni

Per la maggior parte delle tecniche usate per recuperare Automazione interfaccia utente elementi, è necessario specificare una condizione. Una condizione è un set di criteri che definisce gli elementi da recuperare. Una condizione è rappresentata dall'interfaccia IUIAutomationCondition .

La condizione più semplice è la condizione vera, ovvero un oggetto predefinito che specifica che tutti gli elementi nell'ambito di ricerca devono essere restituiti. La condizione false è l'inverso della condizione true ed è meno utile, perché impedisce la ricerca di elementi. È possibile ottenere un'interfaccia per la condizione true usando IUIAutomation::CreateTrueCondition.

Altre tre condizioni predefinite, disponibili come proprietà nell'oggetto IUIAutomation, possono essere usate da sole o in combinazione con altre condizioni: IUIAutomation::ContentViewCondition, ControlViewCondition e RawViewCondition. RawViewCondition, usato da solo, equivale alla condizione true, perché non filtra gli elementi in base alle proprietà IUIAutomationElement::CurrentIsControlElement o CurrentIsContentElement.

Le altre condizioni vengono compilate da oggetti condizione, ognuno dei quali specifica un valore della proprietà. Ad esempio, una condizione di proprietà può specificare che l'elemento è abilitato o che supporta un determinato pattern di controllo.

Le condizioni che usano la logica booleana possono essere combinate chiamando IUIAutomation::CreateAndCondition, CreateOrCondition, CreateNotCondition e metodi correlati.

Ambito di ricerca

Le ricerche eseguite tramite IUIAutomationElement::FindFirst o FindAll devono avere un ambito e una posizione iniziale.

Nota

Qualsiasi commento su questi due metodi si applica anche a IUIAutomationElement::FindFirstBuildCache e FindAllBuildCache.

 

L'ambito definisce lo spazio intorno al punto iniziale in cui eseguire la ricerca. Ciò può includere l'elemento stesso, i relativi elementi di pari livello, il relativo padre, i relativi figli immediati e i relativi discendenti. Tenere presente che i metodi Find non supportano la ricerca nell'albero di Microsoft Automazione interfaccia utente, ovvero la ricerca di elementi predecessori non è supportata.

L'ambito di una ricerca è definito da una combinazione bit per bit di valori del tipo enumerato TreeScope .

Ricerca di un elemento noto

Per trovare un elemento noto identificato dal nome, dall'ID di automazione o da un'altra proprietà o combinazione di proprietà, è più semplice usare il metodo IUIAutomationElement::FindFirst. Se l'elemento cercato è una finestra dell'applicazione, il punto iniziale della ricerca può essere l'elemento radice.

Questo modo di trovare elementi Automazione interfaccia utente è più utile negli scenari di test automatizzati.

Per un esempio di codice che mostra come trovare un elemento noto, vedere Ricerca di un elemento in base al nome.

Ricerca di elementi in un sottoalbero

Per trovare tutti gli elementi che soddisfano criteri specifici e sono correlati a un elemento noto, è possibile chiamare IUIAutomationElement::FindAll nell'elemento noto. Ad esempio, utilizzare questo metodo per recuperare voci di elenco o voci di menu da un elenco o un menu oppure per identificare tutti i controlli in una finestra di dialogo.

Per un esempio di codice che mostra come trovare elementi in un sottoalbero, vedere Ricerca di elementi correlati.

Esplorazione di un sottoalbero

Se non si ha alcuna conoscenza precedente delle applicazioni con cui è possibile usare il client, è possibile creare un sottoalbero di tutti gli elementi di interesse usando IUIAutomationTreeWalker. Il client potrebbe eseguire questa operazione, ad esempio, in risposta a un evento di modifica dello stato attivo; ovvero, quando un'applicazione o un controllo riceve lo stato attivo per l'input, il client Automazione interfaccia utente esamina gli elementi figlio e forse tutti i discendenti dell'elemento attivo.

Tenere presente che l'albero Automazione interfaccia utente è a elevato utilizzo di risorse. Camminare l'albero solo quando non è possibile usare i metodi IUIAutomationElement::FindFirst, FindAll o BuildUpdatedCache.

È possibile definire un albero personalizzato passando una condizione personalizzata a IUIAutomation::CreateTreeWalker oppure è possibile usare uno degli oggetti predefiniti seguenti definiti come proprietà dell'interfaccia IUIAutomation di base.

Oggetto Scopo
ContentViewWalker Trova solo gli elementi la cui proprietà IUIAutomationElement::CurrentIsContentElement è TRUE.
ControlViewWalker Trova solo gli elementi la cui proprietà IUIAutomationElement::CurrentIsControlElement è TRUE.
RawViewWalker Trova tutti gli elementi.

 

Dopo aver ottenuto un IUIAutomationTreeWalker, chiamare i metodi IUIAutomationTreeWalker::GetXxx per spostarsi tra gli elementi del sottoalbero, passando l'elemento da cui iniziare a camminare.

Il metodo IUIAutomationTreeWalker::Normalize può essere usato per passare a un elemento nel sottoalbero da un altro elemento che non fa parte della visualizzazione. Si supponga, ad esempio, di creare una visualizzazione di un sottoalbero usando IUIAutomation::ContentViewWalker. L'applicazione riceve la notifica che una barra di scorrimento ha ricevuto lo stato attivo per l'input. Poiché una barra di scorrimento non è un elemento con contenuto, non è presente nella visualizzazione del sottoalbero. Tuttavia, è possibile passare IUIAutomationElement che rappresenta la barra di scorrimento a IUIAutomationTreeWalker::Normalize e recuperare il predecessore più vicino presente nella visualizzazione contenuto.

Per esempi di codice che illustrano come usare l'interfaccia IUIAutomationTreeWalker, vedere How to Walk the Automazione interfaccia utente Tree(Procedura dettagliata dell'albero di Automazione interfaccia utente).

Altri modi per recuperare un elemento

Oltre alle ricerche e alla navigazione, è possibile recuperare un oggetto IUIAutomationElement nei modi seguenti.

Da un evento

Quando l'applicazione riceve un evento Automazione interfaccia utente, l'oggetto di origine passato al gestore eventi è rappresentato da un oggetto IUIAutomationElement. Ad esempio, se sottoscrivi eventi con modifiche dello stato attivo, l'origine passata a IUIAutomationFocusChangedEventHandler è l'elemento che ha ricevuto lo stato attivo. Per altre informazioni, vedere Sottoscrizione di eventi Automazione interfaccia utente.

Da un punto

Per recuperare un oggetto IUIAutomationElement dalle coordinate dello schermo, ad esempio una posizione del cursore, utilizzare il metodo IUIAutomation::ElementFromPoint.

Da un handle di finestra

Per recuperare un IUIAutomationElement da un HWND, usare il metodo IUIAutomation::ElementFromHandle.

Dal controllo con lo stato attivo

Per recuperare un oggetto IUIAutomationElement che rappresenta il controllo con stato attivo, utilizzare il metodo IUIAutomation::GetFocusedElement.

Panoramica dell'albero di automazione interfaccia utente

Automazione interfaccia utente'app di esempio client del contenuto del documento