Меню

Árbol XPath
XPath — es una forma de encontrar información específica en un documento. Puede utilizar XPath para buscar elementos específicos o listas de elementos de la interfaz de usuario.
Puede utilizar XPath para generar consultas como una ruta a un elemento. Esta ruta es una estructura anidada. Una estructura similar se denomina "árbol XPath".

El árbol XPath de la interfaz de Windows
El camino hacia el artículo se asemeja a la forma en que una carta llega al destinatario en una dirección: PaísCiudadCalleCasaPisoEl propio destinatario. Puede haber muchas ciudades en un país y varias personas viviendo en un piso, también a la manera de un elemento: cada grupo puede tener subgrupos y varios elementos del mismo tipo. Para dirigirse a partes de un documento, la expresión del lenguaje XPath utiliza un designador de ruta similar al designador de una URL.
Cadena XPath — es en realidad la ruta al elemento en el árbol, donde cada nivel está separado por una barra "/". El resultado de procesar una expresión XPath es un objeto que puede ser:
  • Existen ejes para describir la relación de los elementos del árbol:
  • child:: — contiene muchos elementos descendientes (elementos un nivel por debajo).
  • descendant:: — contiene el conjunto completo de elementos descendientes (es decir, tanto los elementos descendientes más cercanos como todos sus elementos descendientes). La expresión /descendiente:: node()/ puede abreviarse como //;
  • descendant-or-self:: — contiene el conjunto completo de elementos descendientes y el elemento actual. Con este eje, por ejemplo, es posible organizar el segundo paso para seleccionar elementos de cualquier nodo, no sólo del nodo raíz: basta con tomar todos los descendientes de la raíz como primer paso. Por ejemplo, la ruta //span seleccionará todos los nodos del documento span, independientemente de su posición en la jerarquía, buscando tanto el nombre de la raíz como los nombres de todos sus hijos, hasta la profundidad completa de su anidamiento.
  • ancestor:: — contiene muchos elementos antecesores.
  • ancestor-or-self:: — contiene muchos elementos antecesores y el elemento actual.
  • parent:: — contiene un elemento predicado un nivel más atrás.
  • self:: — contiene el elemento actual.
  • following:: — contiene muchos elementos por debajo del elemento actual en el árbol (en todos los niveles y capas), excluyendo sus propios descendientes.
  • following-sibling:: — contiene muchos elementos hermanos del mismo nivel, a continuación de la capa actual.
  • preceding:: — contiene el conjunto de elementos por encima del elemento actual en el árbol (en todos los niveles y capas), excluyendo el conjunto de sus propios ancestros.
  • preceding-sibling:: — contiene muchos elementos hermanos del mismo nivel que preceden a la capa actual.
  • attribute:: — contiene muchos atributos del elemento actual. Esta referencia puede sustituirse por el símbolo @;
  • namespace:: — contiene muchos elementos pertenecientes a un espacio de nombres concreto.
En Studio, es posible encontrar la ruta XPath a un elemento de interfaz utilizando el editor Xpath.
Por el momento esta funcionalidad sólo funciona para Windows de escritorio, para encontrar la ruta a un elemento en una aplicación web utilice FlaUInspect.
Utilicemos esta actividad como ejemplo "Clic en un elemento UI".

Busquemos el XPath del botón "Siete" de la aplicación Calculadora de Windows.

Ejecutar la calculadora en la actividad "Clic en un elemento UI" cerca de la propiedad Xpath, pulse la imagen del cursor. En el modo de búsqueda de elementos, pulse la tecla Siete (7) de la calculadora.

La ruta al elemento aparecerá en el campo XPath. Haga clic en la imagen del lápiz en la propiedad "XPath" y navegue hasta el editor XPath.

Vaya a la visualización del árbol de elementos haciendo clic en la casilla "Mostrar árbol de IU".

El resultado es un árbol de elementos de interfaz de usuario ordenado con el elemento resaltado previamente seleccionado mediante el selector. Los atributos se desplazan hacia la derecha.
El árbol muestra todos los elementos disponibles para interactuar en la interfaz disponible. Para cambiar a otro elemento, haga clic con el botón derecho del ratón y seleccione el elemento. Cabe señalar que los elementos de un mismo nivel sólo difieren en un atributo al guardar los anteriores.
Considera la interacción con la calculadora.
A continuación se muestra la ruta al botón Siete de la calculadora.

/Window[@ClassName = 'ApplicationFrameWindow' and @Name = 'Calculadora']/Window[@ClassName = 'Windows.UI.Core.CoreWindow' and @Name = 'Calculadora']/Custom[@AutomationId = 'NavView']/Group[@ClassName = 'LandmarkTarget']/Group[@AutomationId = 'NumberPad' and @ClassName = 'NamedContainerAutomationPeer' and @Name = 'Panel numérico']/Button[@AutomationId = 'num7Button' and @ClassName = 'Button' and @Name = 'Siete']
Ruta al botón Ocho.

/Window[@ClassName = 'ApplicationFrameWindow' and @Name = 'Calculadora']/Window[@ClassName = 'Windows.UI.Core.CoreWindow' and @Name = 'Calculadora']/Custom[@AutomationId = 'NavView']/Group[@ClassName = 'LandmarkTarget']/Group[@AutomationId = 'NumberPad' and @ClassName = 'NamedContainerAutomationPeer' and @Name = 'Panel numérico']/Button[@AutomationId = 'num8Button' and @ClassName = 'Button' and @Name = 'Ocho']
Observe que el siguiente fragmento es el mismo en ambos casos.

/Window[@ClassName = 'ApplicationFrameWindow' and @Name = 'Calculadora']/Window[@ClassName = 'Windows.UI.Core.CoreWindow' and @Name = 'Calculadora']/Custom[@AutomationId = 'NavView']/Group[@ClassName = 'LandmarkTarget']/Group[@AutomationId = 'NumberPad' and @ClassName = 'NamedContainerAutomationPeer' and @Name = 'Panel numérico']
En consecuencia, si es necesario acceder dinámicamente a diferentes botones de calculadora, la ruta XPath debe optimizarse eliminando los atributos diferentes y adaptándose a una configuración diferente del mismo nivel.
Por ejemplo, seleccione el botón [Guardar memoria] en el grupo [Controles de memoria]:

Desactiva el atributo Automatización y pon el nombre del botón a pulsar en el elemento Nombre:

El elemento convertido tendrá el siguiente XPath:

/Window[@ClassName = 'ApplicationFrameWindow' and @Name = 'Calculadora']/Window[@ClassName = 'Windows.UI.Core.CoreWindow' and @Name = 'Calculadora']/Custom[@AutomationId = 'NavView']/Group[@ClassName = 'LandmarkTarget']//Button[@ClassName = 'Button' and @Name = 'Almacenamiento en memoria']
Del mismo modo, puede escribir en @Name = 'One' para obtener Xpath Button[One] en Group[Numeric Panel]:

/Window[@ClassName = 'ApplicationFrameWindow' and @Name = 'Calculadora']/Window[@ClassName = 'Windows.UI.Core.CoreWindow' and @Name = 'Calculadora']/Custom[@AutomationId = 'NavView']/Group[@ClassName = 'LandmarkTarget']//Button[@ClassName = 'Button' and @Name = 'Un']
Es decir, conservando la construcción Xpath universal, es posible referirse a diferentes elementos de otros grupos siempre que compartan raíces comunes en el árbol Xpath.
La segunda opción para acceder a un conjunto de elementos pertenecientes al mismo grupo de elementos Xpath es a través de la configuración de anclaje:
Seleccione el botón [Borrar toda la memoria] y el botón [Recuperar de la memoria] con el anclaje ajustado en Ventana [Calculadora] para cada uno de ellos. Obtenemos el siguiente Xpath:

/Window[@ClassName = 'ApplicationFrameWindow' and @Name = 'Calculadora']/child::*[2]/child::*[2]/child::*[2]/child::*[4]/child::*[1]

/Window[@ClassName = 'ApplicationFrameWindow' and @Name = 'Calculadora']/child::*[2]/child::*[2]/child::*[2]/child::*[4]/child::*[2]
Los números corresponden a la ubicación de los botones en el árbol de elementos y pueden asignarse directamente a ellos en el eje hijo, ignorando algunos de los atributos (incluidos los dinámicos). Se puede añadir cualquier atributo Xpath y vincularlo mediante operadores si es necesario. Ejemplo con Nombre: