CRLF导致通过xpath查找元素时出现问题

时间:2013-06-05 19:35:36

标签: xpath

我正在研究测试用例,需要在表格中查找文本。唯一关键是上一栏中的标签。键是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>&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 个答案:

答案 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