В соответствии с @kjhughes в это обсуждение , XPath для выбора, а не для манипуляции. Вы можете выбрать узлы, как они существуют в документе XML, но вы не можете преобразовать эти узлы.
В вашем случае, если ваш XML-документ содержит этот узел:
<div id="msg">
<b>text1</b>
<br>
text2 <b>text3</b> text4
<ul class="list">
<li>...</li>
<li>...</li>
<li>...</li>
</ul>
text5
</div>
Вы можете выбрать узел <div
> через //div[@id='msg']
, но выбранный узел будет отображаться так же, как и в исходном XML, то есть дочерний элемент с class как list
внутри <ul>
узел.
Если вы хотите манипулировать или трансформировать узел, выбранный с помощью XPath (чтобы исключить его дочерние элементы), вам придется использовать язык хостинга (XSLT, JavaScript, Python, Java, C # и т. Д.), Чтобы манипулировать выбором.
Решение
Для извлечения текстов по отдельности вы можете использовать следующее решение:
WebElement myElement = driver.findElement(By.xpath("//div[@id='msg']"));
String text1 = myElement.findElement(By.xpath("./b")).getAttribute("innerHTML");
String text2 = ((JavascriptExecutor)driver).executeScript('return arguments[0].childNodes[3].textContent;', myElement).toString();
String text3 = ((JavascriptExecutor)driver).executeScript('return arguments[0].childNodes[4].textContent;', myElement).toString();
String text4 = ((JavascriptExecutor)driver).executeScript('return arguments[0].childNodes[5].textContent;', myElement).toString();
String text5 = ((JavascriptExecutor)driver).executeScript('return arguments[0].lastChild.textContent;', myElement).toString();