Auf meiner Webseite gibt es eine div
mit einem class
Namen Test
.
Wie finde ich es mit XPath
?
Auf meiner Webseite gibt es eine div
mit einem class
Namen Test
.
Wie finde ich es mit XPath
?
Antworten:
Dieser Selektor sollte funktionieren, ist jedoch effizienter, wenn Sie ihn durch das entsprechende Markup ersetzen:
//*[contains(@class, 'Test')]
Oder, da wir wissen, dass das gesuchte Element a ist div
:
//div[contains(@class, 'Test')]
Da dies jedoch auch mit Fällen wie class="Testvalue"
oder class="newTest"
übereinstimmt, ist die in den Kommentaren angegebene Version von @ Tomalak besser :
//div[contains(concat(' ', @class, ' '), ' Test ')]
Wenn Sie wirklich sicher sein möchten, dass es korrekt übereinstimmt, können Sie auch die Funktion zum Normalisieren des Leerzeichens verwenden, um streunende Leerzeichen um den Klassennamen zu bereinigen (wie von @Terry erwähnt):
//div[contains(concat(' ', normalize-space(@class), ' '), ' Test ')]
Beachten Sie, dass in all diesen Versionen das * am besten durch den Elementnamen ersetzt werden sollte, mit dem Sie tatsächlich übereinstimmen möchten, es sei denn, Sie möchten jedes einzelne Element im Dokument nach der angegebenen Bedingung durchsuchen.
//div[contains(concat(' ', @class, ' '), ' Test ')]
- Ihre werden auch teilweise Übereinstimmungen auftauchen.
Einfachster Weg ..
//div[@class="Test"]
Angenommen, Sie möchten <div class="Test">
wie beschrieben finden.
//
nicht nur verwendet /
.
Der EINZIGE richtige Weg, dies mit XPath zu tun:
//div[contains(concat(" ", normalize-space(@class), " "), " Test ")]
Die Funktion entfernt normalize-space
führende und nachfolgende Leerzeichen und ersetzt außerdem Sequenzen von Leerzeichen durch ein einzelnes Leerzeichen.
Wenn Sie nicht viele dieser Xpath-Abfragen benötigen, können Sie eine Bibliothek verwenden, die CSS-Selektoren in XPath konvertiert, da CSS-Selektoren in der Regel viel einfacher zu lesen und zu schreiben sind als XPath-Abfragen. In diesem Fall können Sie beispielsweise beide verwenden div[class~="Test"]
und div.Test
das gleiche Ergebnis erzielen.
Einige Bibliotheken, die ich finden konnte:
Ich gebe dies nur als Antwort, wie Tomalak es vor langer Zeit als Kommentar zur Antwort von Meder gegeben hat
//div[contains(concat(' ', @class, ' '), ' Test ')]
concat(' ', normalize-space(@class), ' ')
der Berücksichtigung aller möglichen Leerzeichen?
//div[contains(concat(' ', @class, ' '), ' Test ')]/chid
keine Kinder ausgewählt?
Eine hilfreiche Funktion kann aus früheren Antworten gemacht werden:
function matchClass($className) {
return "[contains(concat(' ', normalize-space(@class), ' '), ' $className ')]";
}
Dann konzentrieren Sie einfach den Funktionsaufruf in Ihre Abfrage.
Sie können Elemente wie dieses Beispiel finden (alle CSS-Elemente)
private By
allElementsCss = By.xpath(".//div[@class]");