2013-06-05 25 views
1

我正在测试用例上工作,需要在表中查找文本。唯一关键的是前一列中的标签。密钥是Next Trckng/Dschrg,Next Full,Next Qtrly,Next Mdcr。我想创建一个xpath表达式,它将根据键找到Text 1,Text 2,Text 3和Text 4。由于所有的键都在其中有Next,所以我嘲笑了这一点,一次找到所有四个键。CRLF在通过xpath找到元素时造成问题

// TD [前同辈:: TD [含有(后裔::文本(), '下一步')]] /一个

第三个未找到,因为它不具有“一'元素,这很好。问题出现在第一个td。它有一个跨度,不同于其他。跨度位于td的第二条物理线上。看起来,CRLF阻止FirePath找到第一个td,当我将该跨度放在与td相同的行上时,发现它。问题是我无法更改实际的页面,这是一个测试用例。

这是一个FireBug问题还是这实际上导致DOM中的两个文本元素?如何调整xpath以查找所有四个节点?

下面是HTML:

<table border=1> 
    <tbody> 
     <tr> 
      <td> 
       <span id="xxx"><a><img></a></span>&nbsp;&nbsp;&nbsp; 
       Next Trckng/Dschrg:</td> 
      <td><a>Text 1</a></td> 
      <td>Next Full:</td> 
      <td><a>Text 2</a></td> 
      <td>Next Qtrly:</td> 
      <td>&nbsp;<!-- Text 3 --></td> 
      <td>Next Mdcr:</td> 
      <td><a>Text 4</a></td> 
      <td>Change Of Therapy:</td> 
     </tr> 
    </tbody> 
</table> 

回答

1

的问题是用该表达contains(descendant::text(),'Next')。函数contains需要两个字符串作为参数。由于您将节点集作为第一个参数传递,因此将其转换为字符串。通过调用节点集上的string函数进行转换,其中according to the spec以文档顺序返回的节点的字符串值为第一个。就你而言,这将是td元素的第一个文本子元素。对于第一个td元素,这是一个仅包含空格的文本节点。

的解决方案是简单:当前td元件传递到contains功能:

contains(., 'Next') 

该单个节点的字串值将包含concatenation of the string-values of all text node descendants

相关问题