Меню

Árvore XPath
XPath — é uma forma de encontrar informações específicas em um documento. Você pode usar o XPath para pesquisar itens específicos ou listas de elementos de interface de usuário.
Você pode usar o XPath para gerar consultas como um caminho para um elemento. Este caminho é uma estrutura aninhada. Uma estrutura similar é chamada de árvore XPath.

El árbol XPath de la interfaz de Windows
O caminho para o item se assemelha ao modo como uma carta chega ao destinatário em um endereço: País→Cidade→Rua→Casa→Apartamento→O próprio destinatário. Pode haver muitas cidades em um país e várias pessoas vivendo em um apartamento, também no caminho de um item: cada grupo pode ter subgrupos e vários itens do mesmo tipo. Para endereçar partes de um documento, a expressão em linguagem XPath usa um designador de caminho semelhante a um designador de URL.
String XPath — é na realidade o caminho para o elemento na árvore, onde cada nível é separado por uma barra "/". O resultado do processamento de uma expressão XPath é um objeto que pode ser:
  • Há eixos para descrever a relação dos elementos da árvore:
  • child:: — contém muitos elementos descendentes (elementos um nível abaixo).
  • descendant:: — contém o conjunto completo de elementos descendentes (ou seja, tanto os elementos descendentes mais próximos quanto todos os seus elementos descendentes). A expressão /descendente:: nodo()/ pode ser abreviada como //;
  • descendant-or-self:: — contém o conjunto completo de elementos descendentes e o elemento atual. Com este eixo, por exemplo, é possível organizar o segundo passo para selecionar elementos de qualquer nó, não apenas o nó raiz: basta tomar todos os descendentes da raiz como primeiro passo. Por exemplo, o caminho //span selecionará todos os nós do documento span, independentemente de sua posição na hierarquia, pesquisando tanto o nome da raiz quanto os nomes de todos os seus filhos, até a profundidade total de seu ninho.
  • ancestor:: — contém muitos elementos predecessores.
  • ancestor-or-self:: — contém muitos elementos predecessores e o elemento atual.
  • parent:: — contém um elemento predicado um nível mais atrás.
  • self:: — contém o elemento atual.
  • following:: — contém muitos elementos abaixo do elemento atual na árvore (em todos os níveis e camadas), excluindo seus próprios descendentes.
  • following-sibling:: — contém muitos elementos irmãos do mesmo nível, seguindo a camada atual.
  • preceding:: — contém o conjunto de elementos acima do elemento atual na árvore (em todos os níveis e camadas), excluindo o conjunto de seus próprios ancestrais.
  • preceding-sibling:: — contém muitos elementos irmãos do mesmo nível que precede a camada atual.
  • attribute:: — contém muitos atributos do elemento atual. Esta referência pode ser substituída pelo símbolo @;
  • namespace:: — contém muitos elementos pertencentes a um namespace particular.
No Studio, é possível encontrar o caminho XPath para um elemento de interface usando o editor Xpath.
No momento esta funcionalidade só funciona para o ambiente de trabalho Windows, para encontrar o caminho para um item em uma aplicação web FlaUInspect.
Vamos usar esta atividade como exemplo "Clique em um elemento UI".

Vamos procurar o XPath do botão "Sete" da aplicação Calculadora do Windows.

Executando a calculadora na atividade "Clique em um elemento UI" perto da propriedade Xpath, pressione a imagem do cursor. No modo de busca de itens, pressione a tecla Sete (7) na calculadora.

O caminho para o elemento aparecerá no campo XPath. Clique na imagem do lápis na propriedade "XPath" e navegue até o editor XPath.

Vá para a visualização da árvore de elementos clicando na caixa de seleção "Mostrar árvore UI".

O resultado é uma árvore de elementos UI ordenados com o elemento destacado previamente selecionado utilizando o seletor. Os atributos são deslocados para a direita.
A árvore mostra todos os elementos disponíveis para interagir na interface disponível. Para alternar para outro elemento, clique com o botão direito do mouse e selecione o elemento. Deve-se observar que elementos do mesmo nível diferem em apenas um atributo ao salvar os anteriores.
Considere a interação com a calculadora.
O caminho para o botão Sete na calculadora é mostrado abaixo.

/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 = 'Painel numérico']/Button[@AutomationId = 'num7Button' and @ClassName = 'Botão' and @Name = 'Sete']
Rota para o botão Oito.

/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 = 'Painel numérico']/Button[@AutomationId = 'num8Button' and @ClassName = 'Botão' and @Name = 'Oito']
Observe que o seguinte fragmento é o mesmo em ambos os 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 = 'Painel numérico']
Consequentemente, se diferentes botões de calculadora precisarem ser acessados dinamicamente, o caminho XPath deve ser otimizado pela remoção dos diferentes atributos e adaptação a uma configuração diferente do mesmo nível.
Por exemplo, selecione o botão [Salvar Memória] no grupo [Controles de Memória]:

Desative o atributo Automação e coloque o nome do botão a ser clicado no elemento Nome:

O elemento convertido terá os seguintes XPath:

/Window[@ClassName = 'ApplicationFrameWindow' and @Name = 'Calculadora']/Window[@ClassName = 'Windows.UI.Core.CoreWindow' and @Name = 'Calculadora']/Custom[@AutomationId = 'NavView']/Group[@ClassName = 'LandmarkTarget']//Button[@ClassName = 'Botão' and @Name = 'Armazenamento de memória']
Da mesma forma, você pode digitar @Name = 'One' para obter Xpath Button[One] em Grupo[Painel Numérico]:

/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']
Ou seja, mantendo a construção universal do Xpath, é possível referir-se a diferentes elementos de outros grupos desde que compartilhem raízes comuns na árvore Xpath.
A segunda opção para acessar um conjunto de elementos pertencentes ao mesmo grupo de elementos Xpath é através da configuração da âncora:
Selecione o botão [Limpar toda a memória] e o botão [Recuperar da memória] com a âncora definida em Janela [Calculadora] para cada um deles. Obtemos o seguinte 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]
Os números correspondem à localização dos botões na árvore de elementos e podem ser atribuídos diretamente a eles no eixo infantil, ignorando alguns dos atributos (inclusive os dinâmicos). Qualquer atributo Xpath pode ser adicionado e vinculado pelos operadores, se necessário. Exemplo com Nome: