Share via


Obtener elementos de UI Automation

NotaNota

Esta documentación está dirigida a desarrolladores de .NET Framework que desean usar las clases administradas de UI Automation definidas en el espacio de nombres System.Windows.Automation.Para obtener información actualizada sobre UI Automation, vea Windows Automation API: UI Automation.

En este tema se describen las diversas maneras de obtener objetos AutomationElement para elementos de la user interface (UI).

Nota de precauciónPrecaución

Si la aplicación cliente intenta buscar elementos en su propia interfaz de usuario, todas las llamadas de UI Automation deben realizarse en un subproceso independiente.Para obtener más información, vea Aspectos relacionados con subprocesos de la UI Automation.

Este tema contiene las secciones siguientes.

  • Elemento raíz
  • Condiciones
  • Ámbito de búsqueda
  • Buscar un elemento conocido
  • Buscar elementos en un subárbol
  • Recorrer un subárbol
  • Otras maneras de recuperar un elemento
  • Temas relacionados

Elemento raíz

Todas las búsquedas de objetos AutomationElement deben tener un punto de inicio. Este puede ser cualquier elemento, incluso el escritorio, una ventana de la aplicación o un control.

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

Nota de precauciónPrecaución

En general, debe intentar obtener únicamente elementos secundarios directos de la propiedad RootElement.Una búsqueda de descendientes puede recorrer en iteración centenares o incluso miles de elementos, lo que produciría posiblemente un desbordamiento de pila.Si intenta obtener un elemento concreto en un nivel inferior, deberá iniciar la búsqueda desde la ventana de la aplicación o desde un contenedor de un nivel inferior.

Condiciones

Para la mayoría de las técnicas que puede utilizar para recuperar elementos de UI Automation, debe especificar un objeto Condition, que es un conjunto de criterios que definen qué elementos se desea recuperar.

La condición más simple es TrueCondition, un objeto predefinido que especifica que deben devolverse todos los elementos dentro del ámbito de la búsqueda. FalseCondition, la condición opuesta de TrueCondition, es menos útil puesto que evitaría que se encuentre ningún elemento.

Se pueden utilizar otras tres condiciones predefinidas solas o en combinación con otras condiciones: ContentViewCondition, ControlViewCondition y RawViewCondition. RawViewCondition, utilizada sola, es equivalente a TrueCondition, porque no filtra los elementos por sus propiedades IsControlElement o IsContentElement.

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

Las condiciones se pueden combinar mediante la lógica booleana construyendo objetos de tipo AndCondition, OrCondition y NotCondition.

Ámbito de búsqueda

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

El ámbito define el espacio alrededor del punto de inicio en el que se va a buscar. Este podría incluir el propio elemento, sus elementos relacionados, su elemento primario, sus antecesores, sus elementos secundarios inmediatos y sus descendientes.

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

Buscar un elemento conocido

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

Esta manera de buscar elementos de UI Automation resulta muy útil en escenarios de pruebas automatizadas.

Buscar elementos en un subárbol

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

Recorrer un subárbol

Si no tiene ningún conocimiento previo de las aplicaciones con las que se puede utilizar el cliente, puede construir un subárbol de todos los elementos de interés utilizando la clase TreeWalker. La aplicación podría hacer esto en respuesta a un evento de cambio de foco; es decir, cuando una aplicación o un control reciba el foco de entrada, el cliente de Automatización de la interfaz de usuario examinará los elementos secundarios y quizás todos los descendientes del elemento que tiene el foco.

TreeWalker también se puede utilizar para identificar los antecesores de un elemento. Por ejemplo, al recorrer el árbol en dirección ascendente se puede identificar la ventana primaria de un control.

Puede utilizar TreeWalker creando un objeto de la clase (definir los elementos de interés pasando un objeto Condition) o utilizando uno de los objetos predefinidos siguientes que se definen como campos de TreeWalker.

ContentViewWalker

Busca únicamente los elementos cuya propiedad IsContentElement sea true.

ControlViewWalker

Busca únicamente los elementos cuya propiedad IsControlElement sea true.

RawViewWalker

Busca todos los elementos.

Después de obtener una clase TreeWalker, utilizarla es sencillo. Sólo debe llamar a los métodos Get para navegar entre los elementos del subárbol.

El método Normalize se puede utilizar para navegar a un elemento del subárbol desde otro elemento que no forme parte de la vista. Por ejemplo, supongamos que ha creado una vista de un subárbol utilizando ContentViewWalker. La aplicación recibirá la 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 el objeto AutomationElement que representa la barra de desplazamiento a Normalize y recuperar el antecesor más cercano que esté en la vista de contenido.

Otras maneras de recuperar un elemento

Además de recuperar un objeto AutomationElement mediante búsquedas y navegación, puede recuperarlo de las maneras siguientes.

Desde un evento

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

Para obtener más información, vea Suscribirse a eventos de UI Automation.

Desde un punto

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

Desde un identificador de ventana

Para recuperar un objeto AutomationElement desde un identificador de ventana (HWND), utilice el método estático FromHandle.

Desde el control que tiene el foco

Puede recuperar un objeto AutomationElement que representa el control que tiene el foco desde la propiedad estática FocusedElement.

Vea también

Tareas

Buscar un elemento de UI Automation basándose en una condición de propiedad

Navegar entre elementos de UI Automation con TreeWalker

Conceptos

Información general sobre el árbol de la UI Automation