Also, ein WebElement in Selenium, versuche ich, alle seine direkten Kinder von XPath einschließlich Textknoten zu bekommen. Ich habe bereits den XPath "*" ausprobiert, der funktioniert, gibt mir aber keinen Textknoten (falls vorhanden). Laut XPaths Dokumentation habe ich dann viele Dinge ausprobiert:Selen: InvalidSelectorException mit XPath Kind :: node()
Ich habe diese XPaths mit der XPathHelper-Erweiterung auf Chrome versucht und es funktioniert wie geplant, aber es scheint nicht mit Selenium zu funktionieren (Chrome WebDriver und PhantomJS).
Dies ist meine Schleife, die ich sollte gedacht arbeiten:
for(WebElement child : node.findElements(new By.ByXPath("child::node()"))) {
//Do something with child
}
Wo könnte das Problem sein?
@Faterou Textknoten können ein Schmerz sein. Die Selenium getText() Methode versucht dich davon abzuschirmen, aber es funktioniert nicht in allen Fällen. Meine Methode heißt getHiddenText, weil die Methode selenium getText() keinen Text zurückgibt, wenn das Element ausgeblendet ist. Aber es wird komplexen Textknotentext zurückgeben, egal ob versteckt oder nicht. Ein Vorbehalt, es werden Nicht-ASCII-Zeichen zurückgegeben, falls vorhanden, daher füge ich oft .replaceAll hinzu ("[^ \\ x20 - \\ x7e]", ""); zum Anruf. – MikeJRamsey56
Das funktioniert wahrscheinlich gut, danke dafür! Das einzige Problem ist, dass ich Selenium über Crawljax benutze und keinen direkten Zugriff auf den Treiber habe. Ich habe Zugriff über die Schnittstelle EmbeddedBrowser, die eine Funktion namens executeJavaScript (String) hat, so dass ich kein Argument setzen kann. Ich weiß, dass ich das in der Frage nicht angegeben habe, also denke ich, dass das aufgelöst wird ... – Faterou
Außerdem gibt TextContent den Textwert aller Nachkommen zurück und ich will nur das direkte Kind. – Faterou