硒xpath刮混合内容html跨度

时间:2011-09-10 16:22:02

标签: html selenium selenium-webdriver xpath

我正在尝试抓一个混合内容的span元素

<span id="span-id">
  <!--starts with some whitespace-->
  <b>bold title</b>
  <br/>
  text here that I want to grab....
</span>

这是一个标识跨度的抓取代码片段。它没有问题就接了它,但是webelement的文本字段是空白的。

IWebDriver driver = new FirefoxDriver();
driver.Navigate().GoToUrl("http://page-to-examine.com");
var query = driver.FindElement(By.XPath("//span[@id='span-id']"));

我尝试将/ text()添加到表达式中,该表达式也不返回任何内容。如果我添加/ b我会得到粗体文本的文本内容 - 这恰好是我不感兴趣的标题。

我确信有一点xpath魔法,这应该很容易,但到目前为止我还没找到它!或者,还有更好的方法?感激地收到任何评论。

2 个答案:

答案 0 :(得分:4)

  

我尝试将/text()添加到表达式中,该表达式也不返回任何内容

这将选择 all 上下文节点的text-node-children - 并且有三个。

你所谓的“无”是最有可能的第一个,这是一个只有空格的文本节点(因此你看到它中没有任何东西)。

您需要的是

//span[@id='span-id']/text()[3] 

当然,还有其他可能的变体

//span[@id='span-id']/text()[last()] 

或者:

//span[@id='span-id']/br/following-sibling::text()[1] 

基于XSLT的验证

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="node()|@*">
     "<xsl:copy-of select="//span[@id='span-id']/text()[3]"/>"
 </xsl:template>

</xsl:stylesheet>

此转换只输出XPath表达式选择的任何内容。应用于提供的XML文档(删除注释):

<span id="span-id">
    <b>bold title</b>
    <br/>
    text here that I want to grab....   
</span>

生成了想要的结果

     "
    text here that I want to grab....   
"

答案 1 :(得分:3)

我相信以下xpath查询应该适合您的情况。跟随兄弟姐妹对你正在尝试做的事情有用。

//span[@id='span-id']/br/following-sibling::text()