Obtención de elementos de automatización de la interfaz de usuario

Nota:

Esta documentación está pensada para desarrolladores de .NET Framework que desean usar las clases de automatización de la interfaz de usuario administradas definidas en el espacio de nombres System.Windows.Automation. Para obtener la información más reciente sobre la automatización de la interfaz de usuario, consulte API de Automatización de Windows: Automatización de la interfaz de usuario.

En este tema se describen las distintas formas de obtener AutomationElement objetos para los elementos de la interfaz de usuario (UI).

Precaución

Si la aplicación cliente puede intentar buscar elementos en su propia interfaz de usuario, debe realizar todas las llamadas de automatización de la interfaz de usuario en un subproceso independiente. Para obtener más información, consulte Problemas de subprocesos de automatización de la interfaz de usuario.

Elemento raíz

Todas las búsquedas de AutomationElement objetos deben tener un punto de partida. Puede ser cualquier elemento, incluido el escritorio, una ventana de aplicación o un control .

El elemento raíz del escritorio, del que descienden todos los elementos, se obtiene de la propiedad estática AutomationElement.RootElement .

Precaución

En general, debe intentar obtener solo los elementos secundarios directos del RootElement. Una búsqueda de descendientes puede recorrer en iteración cientos o incluso miles de elementos, lo que puede dar lugar a un desbordamiento de pila. Si está intentando obtener un elemento específico en un nivel inferior, debe iniciar la búsqueda desde la ventana de la aplicación o desde un contenedor en un nivel inferior.

Condiciones

Para la mayoría de las técnicas que puede usar para recuperar elementos de automatización de la interfaz de usuario, debe especificar un Condition, que es un conjunto de criterios que define qué elementos desea recuperar.

La condición más sencilla es TrueCondition, un objeto predefinido que especifica que se devolverán todos los elementos dentro del ámbito de búsqueda. FalseCondition, el contrario de TrueCondition, es menos útil, ya que impediría que se encuentren elementos.

Se pueden usar otras tres condiciones predefinidas solas o en combinación con otras condiciones: ContentViewCondition, ControlViewConditiony RawViewCondition. RawViewCondition, utilizado por sí mismo, es equivalente a TrueCondition, porque no filtra los elementos por sus IsControlElement propiedades o IsContentElement .

Otras condiciones se generan a partir de uno o varios PropertyCondition objetos, cada uno de los cuales especifica un valor de propiedad. Por ejemplo, puede PropertyCondition especificar que el elemento está habilitado o que admite un determinado patrón de control.

Las condiciones se pueden combinar mediante la lógica booleana mediante la construcción de objetos de tipos AndCondition, OrConditiony NotCondition.

Ámbito de búsqueda

Las búsquedas realizadas mediante FindFirst o FindAll deben tener un ámbito, así como un punto de partida.

El ámbito define el espacio alrededor del lugar inicial en el que se va a buscar. Esto puede incluir el propio elemento, sus hermanos, su padre, sus antepasados, sus hijos inmediatos y sus descendientes.

El ámbito de una búsqueda se define mediante una combinación bit a bit de valores de la TreeScope enumeración.

Búsqueda de un elemento conocido

Para buscar un elemento conocido, identificado por su Name, AutomationIdo alguna otra propiedad o combinación de propiedades, es más fácil usar el FindFirst método . Si el elemento buscado es una ventana de aplicación, el punto inicial de la búsqueda puede ser .RootElement

Esta manera de buscar elementos de automatización de la interfaz de usuario es más útil en escenarios de pruebas automatizadas.

Buscar elementos en un subárbol

Para buscar todos los elementos que cumplen criterios específicos relacionados con un elemento conocido, puede usar FindAll. Por ejemplo, puede usar este método para recuperar elementos de lista o elementos de menú de una lista o menú, o para identificar todos los controles de un cuadro de diálogo.

Caminar por un subárbol

Si no tiene conocimiento previo de las aplicaciones con las que se puede usar el cliente, puede construir un subárbol de todos los elementos de interés mediante la TreeWalker clase . La aplicación puede hacerlo en respuesta a un evento de cambio de foco; es decir, cuando una aplicación o control recibe el foco de entrada, el cliente de Automatización de la interfaz de usuario examina los elementos secundarios y quizás todos los descendientes del elemento centrado.

Otra manera en la que TreeWalker se puede usar es identificar a los antecesores de un elemento. Por ejemplo, al subir el árbol, puede identificar la ventana primaria de un control.

Puede usar TreeWalker creando un objeto de la clase (definiendo los elementos de interés pasando un Condition objeto) o usando uno de los siguientes objetos predefinidos que están definidos como campos de TreeWalker.

Campo Descripción
ContentViewWalker Busca solo los elementos cuya IsContentElement propiedad es true.
ControlViewWalker Busca solo los elementos cuya IsControlElement propiedad es true.
RawViewWalker Busca todos los elementos.

Después de haber obtenido un TreeWalker, su uso es sencillo. Simplemente llame a los Get métodos para navegar entre los elementos del subárbol.

El Normalize método se puede usar para navegar a un elemento del subárbol desde otro elemento que no forma parte de la vista. Por ejemplo, supongamos que ha creado una vista de un subárbol mediante ContentViewWalker. Luego, su aplicación recibe una notificación de que una barra de desplazamiento ha recibido el foco de entrada. Dado que una barra de desplazamiento no es un elemento de contenido, no está presente en la vista del subárbol. Sin embargo, puede pasar la AutomationElement que representa la barra de desplazamiento a Normalize y recuperar el ancestro más cercano que se encuentra dentro de la vista de contenido.

Otras formas de recuperar un elemento

Además de las búsquedas y la navegación, puede recuperar una AutomationElement de las siguientes maneras.

Desde un evento

Cuando la aplicación recibe un evento de automatización de la interfaz de usuario, el objeto de origen que se pasa al controlador de eventos es .AutomationElement Por ejemplo, si se ha suscrito a eventos de cambio de foco, la fuente pasada a AutomationFocusChangedEventHandler es el elemento que recibió el foco.

Para obtener más información, consulte Suscribirse a eventos de automatización de la interfaz de usuario.

A partir de un punto

Si tiene coordenadas de pantalla (por ejemplo, una posición de cursor), puede recuperar un AutomationElement mediante el método estático FromPoint .

Desde un manejador de ventana

Para recuperar un AutomationElement de un HWND, use el método estático FromHandle.

Desde el control centrado

Puede recuperar un AutomationElement que representa el control centrado de la propiedad estática FocusedElement .

Consulte también