Java 如何使用Selenium获取元素的部分文本

Java 如何使用Selenium获取元素的部分文本,java,selenium,selenium-webdriver,xpath,xpath-1.0,Java,Selenium,Selenium Webdriver,Xpath,Xpath 1.0,我有这个HTML: <div id="msg"> <b>text1</b> <br> text2 <b>text3</b> text4 <ul class="list"> <li>...</li> <li>...</li> <li>...</li> </ul> text5 &

我有这个HTML:

<div id="msg">

  <b>text1</b>
  <br>
  text2 <b>text3</b> text4

  <ul class="list">
    <li>...</li>
    <li>...</li>
    <li>...</li>
  </ul>

  text5

</div>
我想使用xpath从div[@id='msg']中提取ul前面的文本

类似于driver.findElementBy.xpathxpath.getText->text1 text2text3 text4

这是可能的,或者我应该使用另一个逻辑?

根据中的@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>

我只是想分享另一个想法

您可以获取OuterHTML,然后将其剥离到ul标记,然后从输出中删除html标记。现在,您可以根据需要更改字符串

我几乎可以使用javascript获得您要查找的文本。将其粘贴到下面以供参考,您可以在Java中执行相同的操作

oHTML = document.querySelector("div#msg").outerHTML
oHTML.substring(0,oHTML.search('<ul')).replace(/<.*>/,'').replace(/<\/?[^>]+(>|$)/g, "").replace(/\n/g, " ").trim()

我想使用xpath。您建议获取整个div,因为@ul mean属性ul的div.Same。您的xpath现在正在寻找div没有class='list':Waqar Nadir的答案是最近的,但仍然不是我想要的结果。这不起作用。这将获取id为msg但没有类“list”的DIV。。。那是。。。它获取标记中的全部文本,即所有内容。我使用xpath获取所有div:text1 text2text3text4。。。text5和如果您试图从逻辑上理解//div[@id='msg'和not@class='list']->get div,id=msg,class!=list@KunLun签出我的更新答案并让我知道状态。最好的办法是从msg中获取.innerHTML,按UL标记拆分,然后去掉HTML标记。@JeffC我如何使用.innerHTML?你能给我举个简单的例子吗?driver.findElementBy.idmsg.getAttributeinnerHTML;
oHTML = document.querySelector("div#msg").outerHTML
oHTML.substring(0,oHTML.search('<ul')).replace(/<.*>/,'').replace(/<\/?[^>]+(>|$)/g, "").replace(/\n/g, " ").trim()
text1      text2 text3 text4