Auf meiner Webseite gibt es eine divmit einem classNamen Test.
Wie finde ich es mit XPath?
Auf meiner Webseite gibt es eine divmit einem classNamen 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-spacefü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.Testdas 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 ')]/chidkeine 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]");