Nella mia pagina web, c'è un divcon un classnome Test.
Come posso trovarlo con XPath?
Nella mia pagina web, c'è un divcon un classnome Test.
Come posso trovarlo con XPath?
Risposte:
Questo selettore dovrebbe funzionare ma sarà più efficiente se lo sostituisci con il markup adatto:
//*[contains(@class, 'Test')]
Oppure, poiché sappiamo che l'elemento ricercato è un div:
//div[contains(@class, 'Test')]
Ma poiché questo corrisponderà anche a casi come class="Testvalue"o class="newTest", la versione di @ Tomalak fornita nei commenti è migliore :
//div[contains(concat(' ', @class, ' '), ' Test ')]
Se desideri essere davvero certo che corrisponderà correttamente, puoi anche utilizzare la funzione normalize-space per ripulire i caratteri di spazio bianco attorno al nome della classe (come indicato da @Terry):
//div[contains(concat(' ', normalize-space(@class), ' '), ' Test ')]
Si noti che in tutte queste versioni, il * dovrebbe essere sostituito con qualsiasi nome di elemento che si desidera effettivamente abbinare, a meno che non si desideri cercare tutti gli elementi nel documento per la condizione data.
//div[contains(concat(' ', @class, ' '), ' Test ')]: anche i tuoi genereranno partite parziali.
Il modo più semplice ..
//div[@class="Test"]
Supponendo di voler trovare <div class="Test">come descritto.
//solo /.
L' UNICO modo giusto per farlo con XPath:
//div[contains(concat(" ", normalize-space(@class), " "), " Test ")]
La funzione normalize-spacerimuove gli spazi bianchi iniziali e finali e sostituisce anche le sequenze di caratteri degli spazi bianchi con un singolo spazio.
Se non hai bisogno di molte di queste query Xpath, potresti voler utilizzare una libreria che converte i selettori CSS in XPath, poiché i selettori CSS sono in genere molto più facili da leggere e scrivere rispetto alle query XPath. Ad esempio, in questo caso, è possibile utilizzare entrambi div[class~="Test"]e div.Testper ottenere lo stesso risultato.
Alcune librerie sono stato in grado di trovare:
Sto solo fornendo questo come una risposta, come Tomalak ha fornito come commento alla risposta del mediatore molto tempo fa
//div[contains(concat(' ', @class, ' '), ' Test ')]
concat(' ', normalize-space(@class), ' ')di tenere conto anche di tutti i tipi di spazi bianchi?
//div[contains(concat(' ', @class, ' '), ' Test ')]/chidnon selezionare i bambini?
Una funzione utile può essere ricavata dalle risposte precedenti:
function matchClass($className) {
return "[contains(concat(' ', normalize-space(@class), ' '), ' $className ')]";
}
Quindi concatena la chiamata di funzione nella tua query.
puoi trovare elementi come questo esempio (tutti gli elementi CSS)
private By
allElementsCss = By.xpath(".//div[@class]");