Qual è la differenza tra .// e // * in XPath?

Mentre trova XPath relativo tramite Firebug: crea like

  1. .//*[@id='Passwd'] ——— E se non .//*[@id='Passwd'] punto all’inizio cosa significa?

  2. Basta aggiungere //* in Xpath – evidenzia — vari elementi della pagina ———- cosa significa?

Di seguito sono riportati i campi XPaths per la password di Gmail. Qual è il significato di * ?

Queste espressioni selezionano tutti diversi nodesets:

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

Il ‘.’ all’inizio significa che l’elaborazione corrente inizia dal nodo corrente . Il ‘*’ seleziona tutti i nodes degli elementi che discendono da questo nodo corrente con il valore -attributo @id uguale a ‘Passwd’.

Cosa succede se non usiamo dot all’inizio cosa significa?

Quindi dovresti selezionare tutti i nodes elemento con un valore -attributo @id uguale a “Passwd” nell’intero documento.

Basta aggiungere // * nell’XPath: mette in evidenza — vari elementi della pagina

Questo selezionerebbe tutti i nodes degli elementi nell’intero documento.

Sotto menzionato: XPatht’s per Gmail Password field sono veri qual è il significato di *?

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

Questo selezionerebbe tutti i nodes degli elementi discendenti dal nodo corrente che @id -attributo-valore è uguale a “Passwd”.

// bambino :: ingresso [@ type = ‘password’]

Questo selezionerebbe tutti i nodes elemento figlio chiamati input che @type -attribute-values ​​sono uguali a ‘password’. Il prefisso asse child:: può essere omesso, perché è il comportamento predefinito.

La syntax della scelta dell’espressione appropriata è spiegata qui su w3school.com .

E gli Assi (il punto corrente in elaborazione) sono spiegati qui in un’altra pagina w3school.com .

Ci sono diversi concetti XPath distinti e chiave in gioco qui …

XPath relativi assoluti o relativi ( / vs.)

  • / introduce un percorso di posizione assoluto, a partire dalla radice del documento.
  • . introduce un percorso di posizione relativo, a partire dal nodo di contesto.

Elemento denominato vs qualsiasi elemento ( ename vs * )

  • /ename seleziona un elemento radice di ename
    • ./ename seleziona tutti ename elementi figlio ename del nodo corrente.
  • /* seleziona l’elemento radice, indipendentemente dal nome.
    • ./* o * seleziona tutti gli elementi figlio del nodo di contesto, indipendentemente dal nome.

asse discendente-o-auto ( //* )

  • //ename seleziona tutti ename elementi di ename in un documento.
    • .//ename seleziona tutti ename elementi di ename corrispondenza o al di sotto del nodo di contesto.
  • //* seleziona tutti gli elementi in un documento, indipendentemente dal nome.
    • .//* seleziona tutti gli elementi, indipendentemente dal nome, al o al di sotto del nodo di contesto.

Con questi concetti in mente, ecco le risposte alle tue domande specifiche …

  • .//*[@id='Passwd'] significa selezionare tutti gli elementi al o al di sotto del nodo di contesto corrente che hanno un valore di attributo id uguale a 'Passwd' .
  • //child::input[@type='password'] può essere semplificato in //input[@type='password'] e significa selezionare tutti gli elementi di input nel documento che hanno un valore di attributo type uguale a 'password' .

Il punto in XPath è chiamato “espressione elemento di contesto” . Se inserisci un punto all’inizio dell’espressione, lo renderebbe specifico per il contesto. In altre parole, id="Passwd" l’elemento con id="Passwd" nel contesto del nodo su cui si sta chiamando il metodo “trova elemento per XPath”.

Il * nel .//*[@id='Passwd'] aiuta a trovare qualsiasi elemento con id='Passwd' .

  1. Per la prima domanda : riguarda il contesto. Puoi vedere Sintassi per sapere cosa significano “.”, “..” ecc. Inoltre, scommetto che non troverai alcuna spiegazione migliore di questo link .
  2. Risposta semplificata per la seconda domanda : generalmente si trovano i nodes usando i tag html come td, a, li, div ecc. Ma ‘*’ significa, trova qualsiasi tag che corrisponda alla tua proprietà data. Viene usato principalmente quando sei sicuro di una determinata proprietà ma non di quel tag in cui l’elemento potrebbe venire, supponiamo che io voglia un elenco di tutti gli elementi con ID ‘xyz’ sia in qualsiasi tag.

Spero che sia d’aiuto 🙂