Condividi tramite


Ottenere elementi di automazione interfaccia utente

NotaNota

La presente documentazione è destinata agli sviluppatori di .NET Framework che desiderano utilizzare le classi UI Automation gestite definite nello spazio dei nomi System.Windows.Automation.Per informazioni aggiornate sull'UI Automation, vedere Windows Automation API: Automazione interfaccia utente (la pagina potrebbe essere in inglese).

In questo argomento viene descritto come ottenere oggetti AutomationElement per gli elementi dell'user interface (UI).

Nota di avvisoAttenzione

Se l'applicazione client può tentare di individuare elementi nella propria interfaccia utente, è necessario effettuare tutte le chiamate di UI Automation su un thread separato.Per ulteriori informazioni, vedere Problemi relativi al threading di automazione interfaccia utente.

Nel presente argomento sono contenute le seguenti sezioni.

  • Elemento radice
  • Condizioni
  • Ambito di ricerca
  • Ricerca di un elemento noto
  • Ricerca di elementi in un sottoalbero
  • Ricerca in un sottoalbero
  • Altre modalità di recupero di un elemento
  • Argomenti correlati

Elemento radice

Tutte le ricerche di oggetti AutomationElement devono avere un punto di partenza, che può essere qualsiasi elemento, ad esempio il desktop, una finestra dell'applicazione o un controllo.

L'elemento radice per il desktop, da cui discendono tutti gli elementi, si ottiene dalla proprietà AutomationElement.RootElement statica.

Nota di avvisoAttenzione

In generale, è necessario tentare di ottenere solo elementi figlio diretti della proprietà RootElement.Una ricerca dei discendenti potrebbe ripetersi in centinaia o addirittura migliaia di elementi, con la possibilità di un overflow dello stack.Se si tenta di ottenere un elemento specifico a un livello inferiore, è necessario avviare la ricerca dalla finestra dell'applicazione o da un contenitore a un livello inferiore.

Condizioni

Per la maggior parte delle tecniche che è possibile utilizzare per recuperare elementi di UI Automation, è necessario specificare un oggetto Condition, ovvero un insieme di criteri che definiscono quali elementi si desidera recuperare.

La condizione più semplice è TrueCondition, un oggetto predefinito che specifica che devono essere restituiti tutti gli elementi all'interno dell'ambito di ricerca. FalseCondition, l'opposto di TrueCondition, è meno utile, in quanto impedirebbe l'individuazione di qualsiasi elemento.

È possibile utilizzare altre tre condizioni predefinite, da sole o in combinazione con altre condizioni: ContentViewCondition, ControlViewCondition e RawViewCondition. RawViewCondition, utilizzata da sola, è equivalente a TrueCondition, perché non filtra gli elementi in base alle relative proprietà IsControlElement o IsContentElement.

Le altre condizioni vengono sviluppate da uno o più oggetti PropertyCondition, ognuno dei quali specifica un valore della proprietà. Ad esempio, un oggetto PropertyCondition potrebbe specificare che l'elemento è abilitato che supporta un determinato pattern di controllo.

Le condizioni possono essere combinate utilizzando la logica booleana costruendo oggetti di tipo AndCondition, OrConditione NotCondition.

Ambito di ricerca

Le ricerche eseguite utilizzando FindFirst o FindAll devono avere un ambito oltre a un punto di partenza.

L'ambito definisce lo spazio intorno al punto di partenza in cui eseguire la ricerca, che potrebbe includere l'elemento stesso, gli elementi di pari livello, l'elemento padre, i predecessori, gli elementi figlio immediati e i relativi discendenti.

L'ambito di una ricerca è definito da una combinazione bit per bit di valori dall'enumerazione TreeScope.

Ricerca di un elemento noto

Per cercare un elemento noto, identificato dalla relativa proprietà Name, AutomationId o da un'altra proprietà o combinazione di proprietà, è più facile utilizzare il metodo FindFirst. Se l'elemento cercato è una finestra dell'applicazione, il punto di partenza della ricerca può essere RootElement.

Questa modalità di ricerca di elementi di UI Automation risulta maggiormente utile negli scenari di test automatizzati.

Ricerca di elementi in un sottoalbero

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

Ricerca in un sottoalbero

Se non si conoscono in precedenza le applicazioni con cui verrà utilizzato il client, è possibile costruire un sottoalbero di tutti gli elementi di interesse utilizzando la classe TreeWalker. Questa operazione potrebbe essere eseguita nell'applicazione in risposta a un evento di stato attivo modificato, ovvero quando un'applicazione o un controllo riceve lo stato attivo, il client di automazione interfaccia utente esamina gli elementi figlio e probabilmente tutti i discendenti dell'elemento con lo stato attivo.

La classe TreeWalker può essere utilizzata anche per identificare i predecessori di un elemento. Ad esempio, risalendo la struttura ad albero è possibile identificare la finestra padre di un controllo.

È possibile utilizzare TreeWalker creando un oggetto della classe (definendo gli elementi di interesse passando un oggetto Condition) o utilizzando uno degli oggetti predefiniti seguenti definiti come campi di TreeWalker.

ContentViewWalker

Trova solo gli elementi la cui proprietà IsContentElement è true.

ControlViewWalker

Trova solo gli elementi la cui proprietà IsControlElement è true.

RawViewWalker

Trova tutti gli elementi.

Dopo avere ottenuto un oggetto TreeWalker, risulta molto semplice utilizzarlo. È sufficiente chiamare i metodi Get per spostarsi tra gli elementi del sottoalbero.

Il metodo Normalize può essere utilizzato per lo spostamento a un elemento del sottoalbero da un altro elemento che non fa parte della visualizzazione. Ad esempio, si supponga di aver creato una visualizzazione di un sottoalbero utilizzando ContentViewWalker. L'applicazione riceve quindi la notifica che una barra di scorrimento ha ricevuto lo stato attivo per l'input. Poiché una barra di scorrimento non è un elemento di contenuto, non è presente nella visualizzazione del sottoalbero. Tuttavia, è possibile passare l'oggetto AutomationElement che rappresenta la barra di scorrimento a Normalize e recuperare il predecessore più vicino che è presente nella visualizzazione contenuto.

Altre modalità di recupero di un elemento

Oltre che tramite ricerche e spostamento, è possibile recuperare un oggetto AutomationElement nelle modalità seguenti.

Da un evento

Quando l'applicazione riceve un evento di UI Automation, l'oggetto di origine passato al gestore eventi è un oggetto AutomationElement. Ad esempio, se sono stati sottoscritti eventi di stato attivo modificato, l'origine passata all'oggetto AutomationFocusChangedEventHandler è l'elemento che ha ricevuto lo stato attivo.

Per ulteriori informazioni, vedere Sottoscrivere gli eventi di automazione interfaccia utente.

Da un punto

Se si dispone di coordinate dello schermo, ad esempio una posizione del cursore, è possibile recuperare un oggetto AutomationElement utilizzando il metodo FromPoint statico.

Da un handle della finestra

Per recuperare un oggetto AutomationElement da un HWND, utilizzare il metodo FromHandle statico.

Dal controllo con lo stato attivo

È possibile recuperare un oggetto AutomationElement che rappresenta il controllo con lo stato attivo dalla proprietà FocusedElement statica.

Vedere anche

Attività

Trovare un elemento di automazione interfaccia utente in base a una proprietà

Navigare tra gli elementi di automazione interfaccia utente utilizzando TreeWalker

Concetti

Cenni preliminari sulla struttura ad albero di automazione dell'interfaccia utente