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