Obtaining UI Automation Elements
Actualización: noviembre 2007
En este tema se describen las diversas maneras de obtener objetos AutomationElement para elementos de la interfaz de usuario (UI).
Precaución: |
---|
Si la aplicación cliente intenta buscar elementos en su propia interfaz de usuario, todas las llamadas de Automatización de la interfaz de usuario deben realizarse en un subproceso independiente. Para obtener más información, vea UI Automation Threading Issues. |
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.
Precaució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 Automatización de la interfaz de usuario, 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 Automatización de la interfaz de usuario 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.
Busca únicamente los elementos cuya propiedad IsContentElement sea true. |
|
Busca únicamente los elementos cuya propiedad IsControlElement sea true. |
|
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 Automatización de la interfaz de usuario, 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 Subscribe to UI Automation Events.
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
Find a UI Automation Element Based on a Property Condition
Navigate Among UI Automation Elements with TreeWalker