Ottenere elementi di automazione interfaccia utente
![]() |
---|
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).
![]() |
---|
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.
![]() |
---|
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.
Trova solo gli elementi la cui proprietà IsContentElement è true. |
|
Trova solo gli elementi la cui proprietà IsControlElement è true. |
|
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