2 回答
TA贡献1811条经验 获得超4个赞
根据本次讨论中的@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 中的显示方式显示,即,具有类的子节点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();
TA贡献1806条经验 获得超8个赞
只是想分享另一个想法。
您可以获取 OuterHTML,然后将其剥离到“ul”标签,然后从输出中删除 html 标签。现在您可以根据需要更改字符串。
我几乎可以使用 javascript 获取您要查找的文本。将其粘贴在下面供您参考,您可以在 Java 中执行相同操作。
oHTML = document.querySelector("div#msg").outerHTMLoHTML.substring(0, oHTML.search('<ul')).replace(/<.*>/,'').replace(/<\/?[^>]+(>|$)/g, "").replace(/\n/g, " ").trim()
您可以在浏览器控制台中运行它以查看输出。下面是javascript输出。
text1 text2 text3 text4
添加回答
举报