Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Annotazioni
Questa documentazione è destinata agli sviluppatori .NET Framework che vogliono usare le classi di automazione interfaccia utente gestite definite nello spazio dei nomi System.Windows.Automation. Per informazioni aggiornate su Automazione interfaccia utente, vedere API di automazione di Windows: Automazione interfaccia utente.
In questo argomento vengono descritti i vari modi per ottenere AutomationElement oggetti per gli elementi dell'interfaccia utente.
Attenzione
Se l'applicazione client potrebbe tentare di trovare elementi nella propria interfaccia utente, è necessario effettuare tutte le chiamate di automazione interfaccia utente in un thread separato. Per ulteriori informazioni, vedere Problemi di threading dell'automazione dell'interfaccia utente.
Elemento radice
Tutte le ricerche di AutomationElement oggetti devono avere un punto di partenza. Può trattarsi di qualsiasi elemento, incluso il desktop, una finestra dell'applicazione o un controllo.
L'elemento radice per il desktop, da cui vengono discendenti tutti gli elementi, viene ottenuto dalla proprietà statica AutomationElement.RootElement .
Attenzione
In generale, dovresti cercare di ottenere solo figli diretti di RootElement. Una ricerca di discendenti può scorrere centinaia o persino migliaia di elementi, con conseguente sovraccarico dello stack. Se si tenta di 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 che è possibile usare per recuperare gli elementi di automazione interfaccia utente, è necessario specificare un Conditioninsieme di criteri che definiscono gli elementi da recuperare.
La condizione più semplice è TrueCondition, un oggetto predefinito che specifica che tutti gli elementi all'interno dell'ambito di ricerca devono essere restituiti. FalseCondition, il contrario di TrueCondition, è meno utile, in quanto impedirebbe la ricerca di qualsiasi elemento.
Altre tre condizioni predefinite possono essere usate da sole o in combinazione con altre condizioni: ContentViewCondition, ControlViewConditione RawViewCondition. RawViewCondition, usato da solo, è equivalente a TrueCondition, perché non filtra gli elementi in base alle loro proprietà IsControlElement o IsContentElement.
Le altre condizioni vengono compilate da uno o più PropertyCondition oggetti, ognuno dei quali specifica un valore della proprietà. Ad esempio, un PropertyCondition può specificare che l'elemento è abilitato o che supporta un determinato pattern di controllo.
Le condizioni possono essere combinate usando la logica booleana creando oggetti di tipi AndCondition, OrConditione NotCondition.
Ambito di ricerca
Le ricerche eseguite tramite FindFirst o FindAll devono avere un ambito e un punto di partenza.
L'ambito definisce lo spazio intorno al punto iniziale in cui eseguire la ricerca. Questo può includere l'elemento stesso, i suoi fratelli, il suo padre, i suoi predecessori, i suoi figli immediati e i suoi discendenti.
L'ambito di una ricerca è definito da una combinazione bit per bit di valori dell'enumerazione TreeScope .
Ricerca di un elemento noto
Per trovare un elemento noto, identificato dalla relativa Nameproprietà , AutomationIdo da un'altra proprietà o combinazione di proprietà, è più semplice usare il FindFirst metodo . Se l'elemento cercato è una finestra dell'applicazione, il punto iniziale della ricerca può essere .RootElement
Questo modo di trovare elementi di automazione interfaccia utente è più utile negli scenari di test automatizzati.
Ricerca di elementi in un sottoalbero
Per trovare tutti gli elementi che soddisfano criteri specifici correlati a un elemento noto, è possibile usare FindAll. Ad esempio, è possibile utilizzare questo metodo per recuperare voci di elenco o voci di menu da un elenco o un menu o per identificare tutti i controlli in una finestra di dialogo.
Percorrere un sottoalbero
Se non si ha alcuna conoscenza precedente delle applicazioni con cui il client può essere usato, è possibile costruire un sottoalbero di tutti gli elementi di interesse usando la TreeWalker classe . L'applicazione potrebbe eseguire questa operazione 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 di automazione interfaccia utente esamina gli elementi figlio e forse tutti i discendenti dell'elemento attivo.
Un altro modo in cui TreeWalker può essere usato consiste nell'identificare i predecessori di un elemento. Ad esempio, risalendo l'albero è possibile identificare la finestra padre di un controllo.
È possibile usare TreeWalker creando un oggetto della classe (definendo gli elementi di interesse passando un Conditionoggetto ) oppure usando uno degli oggetti predefiniti seguenti definiti come campi di TreeWalker.
| Campo | Descrizione |
|---|---|
| ContentViewWalker | Trova solo gli elementi la cui IsContentElement proprietà è true. |
| ControlViewWalker | Trova solo gli elementi la cui IsControlElement proprietà è true. |
| RawViewWalker | Trova tutti gli elementi. |
Dopo aver ottenuto un oggetto TreeWalker, l'uso di è semplice. È sufficiente chiamare i Get metodi per spostarsi tra gli elementi del sottoalbero.
Il Normalize metodo può essere utilizzato per passare a un elemento nel sottoalbero da un altro elemento che non fa parte della visualizzazione. Si supponga, ad esempio, di aver creato una vista di un sottoalbero usando ContentViewWalker. L'applicazione riceve quindi la notifica che una barra di scorrimento ha ricevuto il focus di 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 l'antenato più vicino presente nella visualizzazione del contenuto.
Altri modi per recuperare un elemento
Oltre alle ricerche e alla navigazione, è possibile recuperare un oggetto AutomationElement nei modi seguenti.
Da un evento
Quando l'applicazione riceve un evento di automazione interfaccia utente, l'oggetto di origine passato al gestore eventi è .AutomationElement Ad esempio, se ti sei iscritto agli eventi di modifica dello stato attivo, l'elemento che riceve il focus viene passato come origine al tuo AutomationFocusChangedEventHandler.
Per altre informazioni, vedere Sottoscrivere eventi di automazione interfaccia utente.
Da un punto
Se sono presenti coordinate dello schermo (ad esempio, una posizione del cursore), è possibile recuperare un oggetto AutomationElement usando il metodo statico FromPoint .
Da un handle di finestra
Per recuperare un oggetto AutomationElement da un HWND, utilizzare il metodo statico FromHandle .
Dal controllo focalizzato
È possibile recuperare un AutomationElement che rappresenta il controllo focalizzato dalla proprietà statica FocusedElement.