我正在研究测试用例,需要在表格中查找文本。唯一关键是上一栏中的标签。键是Next Trckng / Dschrg,Next Full,Next Qtrly,Next Mdcr。我想创建一个xpath表达式,它将根据键找到Text 1,Text 2,Text 3和Text 4。由于所有的键都有单词Next,我已经嘲笑它一次找到所有四个键。
// TD [前同辈:: TD [含有(后裔::文本(), '下一步')]] /一
找不到第三个,因为它没有'a'元素,这很好。问题出现在第一个td。与其他人不同,它有一个跨度。跨度位于距离td的第二条物理线上。似乎CRLF阻止FirePath找到第一个td,当我将跨度放在与td相同的行上时,它被找到。问题是我无法更改实际页面,这是一个测试用例。
这是一个FireBug问题还是这实际上导致了DOM中的两个文本元素?如何调整xpath以查找所有四个节点?
这是HTML:
<table border=1>
<tbody>
<tr>
<td>
<span id="xxx"><a><img></a></span>
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> <!-- Text 3 --></td>
<td>Next Mdcr:</td>
<td><a>Text 4</a></td>
<td>Change Of Therapy:</td>
</tr>
</tbody>
</table>
答案 0 :(得分: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。