Qual é a diferença entre .// e // * no XPath?

Ao encontrar o XPath relativo via Firebug: cria como

  1. .//*[@id='Passwd'] ——— e se nós não usamos ponto no começo o que significa?

  2. Basta adicionar //* no Xpath – ele destaca — vários elementos de página ———- o que isso significa?

Abaixo estão os campos de XPaths para a senha do Gmail. Qual é o significado de * ?

  • .//*[@id='Passwd']

  • //child::input[@type='password']

Todas essas expressões selecionam diferentes nós:

.//*[@id=’Passwd ‘]

O ‘.’ no início significa que o processamento atual começa no nó atual . O ‘*’ seleciona todos os nós de elementos descendentes deste nó atual com o @id -attribute-value igual a ‘Passwd’.

E se não usarmos o ponto no início, o que significa?

Em seguida, você selecionaria todos os nós de elemento com um @id -attribute-value igual a ‘Passwd’ em todo o documento.

Basta adicionar // * no XPath – ele destaca — vários elementos da página

Isso selecionaria todos os nós de elementos no documento inteiro .

Abaixo mencionado: XPatht para o campo Senha do Gmail são verdadeiros o que é significância de *?

 .//*[@id='Passwd'] 

Isso selecionaria todos os nós de elemento descendentes do nó atual que @id -attribute-value é igual a ‘Passwd’.

// child :: input [@ type = ‘password’]

Isso selecionaria todos os nós de elemento-filho nomeados input que @type -attribute-values ​​são iguais a ‘password’. O prefixo child:: axis pode ser omitido, porque é o comportamento padrão.

A syntax de escolher a expressão apropriada é explicada aqui em w3school.com .

E os Eixos (ponto atual no processamento) são explicados aqui em outra página do w3school.com .

Existem vários conceitos chave XPath distintos em jogo aqui …

XPaths absolutos versus relativos ( / vs.)

  • / introduz um caminho de localização absoluto, iniciando na raiz do documento.
  • . introduz um caminho de localização relativo, começando no nó de contexto.

Elemento nomeado vs qualquer elemento ( ename vs * )

  • /ename seleciona um elemento raiz ename
    • ./ename seleciona todos os elementos filho ename do nó atual.
  • /* seleciona o elemento raiz, independentemente do nome.
    • ./* ou * seleciona todos os elementos filhos do nó de contexto, independentemente do nome.

eixo descendente ou próprio ( //* )

  • //ename seleciona todos os elementos ename em um documento.
    • .//ename seleciona todos os elementos ename no ou abaixo do nó de contexto.
  • //* seleciona todos os elementos em um documento, independentemente do nome.
    • .//* seleciona todos os elementos, independentemente do nome, no ou abaixo do nó de contexto.

Com esses conceitos em mente, aqui estão as respostas para suas perguntas específicas …

  • .//*[@id='Passwd'] significa selecionar todos os elementos no ou abaixo do nó de contexto atual que possuem um valor de atributo id igual a 'Passwd' .
  • //child::input[@type='password'] pode ser simplificado para //input[@type='password'] e significa selecionar todos os elementos de input no documento que possuem um valor de atributo type igual a 'password' .

O ponto no XPath é chamado de “expressão de item de contexto” . Se você colocar um ponto no início da expressão, isso tornará o contexto específico. Em outras palavras, ele procuraria o elemento com id="Passwd" no contexto do nó no qual você está chamando o método “localizar elemento pelo XPath”.

O * no .//*[@id='Passwd'] ajuda a combinar qualquer elemento com id='Passwd' .

  1. Para a primeira pergunta : é tudo sobre o contexto. Você pode ver a syntax para saber o que significa ‘.’, ‘..’ etc. Além disso, aposto que você não encontrará nenhuma explicação melhor do que este link .
  2. Resposta simplificada para segunda pergunta : Você geralmente encontraria nós usando as tags html como td, a, li, div etc. Mas ‘*’ significa, encontre qualquer tag que corresponda à sua propriedade. É usado principalmente quando você tem certeza sobre uma determinada propriedade, mas não sobre aquela tag na qual o elemento pode vir, como se eu quisesse uma lista de todos os elementos com ID ‘xyz’, seja em qualquer tag.

Espero que ajude 🙂