Come selezionare il nodo specificato all’interno dei set di nodes Xpath per indice con selenium?

Sto scrivendo una prova di selenium. Ed ecco l’espressione xpath che uso per abbinare tutti i pulsanti ‘Modifica’ all’interno di una tabella di dati.

//img[@title='Modify'] 

La mia domanda è, come posso visitare i set di nodes corrispondenti per indice? Ho provato con

 //img[@title='Modify'][i] 

e

 //img[@title='Modify' and position() = i] 

Ma nessuno dei due funziona .. Ho anche provato con il correttore XPath (una estensione firefox). Sono state trovate tutte e 13 le partite, quindi non ho idea di come selezionarne una. Oppure XPath supporta una selezione specifica di nodes che non sono sotto lo stesso nodo genitore?

Questa è una FAQ :

 //someName[3] 

significa : tutti someName elementi someName nel documento, che sono il terzo figlio someName del loro genitore – potrebbero esserci molti di questi elementi.

Quello che vuoi è esattamente il terzo elemento someName :

 (//someName)[3] 

Spiegazione : il [] ha una precedenza (priorità) più alta di // . Ricorda sempre di mettere le espressioni del tipo //someName tra parentesi quando è necessario specificare il nodo N ° del loro elenco di nodes selezionato.

Non c’è i in XPath.

O usi i numeri letterali: //img[@title='Modify'][1]

Oppure costruisci la stringa di espressione in modo dinamico: '//img[@title='Modify']['+i+']' (ma tieni presente che le espressioni XPath dinamiche non funzionano dall’interno di XSLT).

Oppure XPath supporta una selezione specifica di nodes che non sono sotto lo stesso nodo genitore?

Sì: (//img[@title='Modify'])[13]


Questo //img[@title='Modify'][i] significa “qualsiasi con un titolo di ‘Modifica’ e un elemento figlio denominato .”

 //img[@title='Modify'][i] 

è l’abbreviazione di

 /descendant-or-self::node()/img[@title='Modify'][i] 

quindi sta restituendo il nodo i’th sotto lo stesso nodo genitore.

Tu vuoi

 /descendant-or-self::img[@title='Modify'][i] 

(// * [@attributo = ‘valore’]) [indice] per trovare il bersaglio dell’elemento mentre trovi più corrispondenze in esso

Non c’è alcun i in xpath non è completamente vero. Puoi comunque usare count() per trovare l’indice.

Considera la seguente pagina

    
Heading 1 Heading 2 Heading 3 Heading 4 Heading 5 Heading 6
Data row 1 col 1 Data row 1 col 2 Data row 1 col 3 Data row 1 col 4 Data row 1 col 5 Data row 1 col 6
Data row 2 col 1 Data row 2 col 2 Data row 2 col 3 Data row 2 col 4 Data row 2 col 5 Data row 2 col 6
Data row 3 col 1 Data row 3 col 2 Data row 3 col 3 Data row 3 col 4 Data row 3 col 5 Data row 3 col 6
Data row 4 col 1 Data row 4 col 2 Data row 4 col 3 Data row 4 col 4 Data row 4 col 5 Data row 4 col 6
Data row 5 col 1 Data row 5 col 2 Data row 5 col 3 Data row 5 col 4 Data row 5 col 5 Data row 5 col 6
Heading 7 Heading 8 Heading 9 Heading 10 Heading 11 Heading 12
Data row 1 col 1 Data row 1 col 2 Data row 1 col 3 Data row 1 col 4 Data row 1 col 5 Data row 1 col 6
Data row 2 col 1 Data row 2 col 2 Data row 2 col 3 Data row 2 col 4 Data row 2 col 5 Data row 2 col 6
Data row 3 col 1 Data row 3 col 2 Data row 3 col 3 Data row 3 col 4 Data row 3 col 5 Data row 3 col 6
Data row 4 col 1 Data row 4 col 2 Data row 4 col 3 Data row 4 col 4 Data row 4 col 5 Data row 4 col 6
Data row 5 col 1 Data row 5 col 2 Data row 5 col 3 Data row 5 col 4 Data row 5 col 5 Data row 5 col 6