Selenium Xpath:可以存储标签但不能存储

时间:2014-08-20 23:44:18

标签: selenium xpath

我在页面上有以下HTML:

        <li class="underline group">
          <label class="p-left">P</label><span class="p-right">1111</span>
        </li>

以下selenium命令可以正常工作:

<tr>
    <td>storeText</td>
    <td>//li[2]/label</td>
    <td>tmp</td>
</tr>
<tr>
    <td>echo</td>
    <td>${tmp}</td>
    <td></td>
</tr>

以下内容应该有效,但不是:

<tr>
    <td>storeText</td>
    <td>//li[2]/span</td>
    <td>tmp</td>
</tr>
<tr>
    <td>echo</td>
    <td>${tmp}</td>
    <td></td>
</tr>

我找到的唯一解决方案是//li[2]/span[@class='p-right'],但情况如此?为什么默认情况下//li[2]/span不起作用?

2 个答案:

答案 0 :(得分:1)

我要查找的第一件事是,文档中是否有较早的//li[2]/span,在您正在寻找的<li class="underline group">...<span>之前,以及较早的span没有&{ #39; t有class =&#34; p-right&#34;,还没有文字内容?因此,${tmp}会获得首先选择的//li[2]/span的文字值,而不是您尝试选择的文字值?这可以解释您所看到的结果,包括您//li[2]//span也无效的观察结果。&#34;您是否尝试过在浏览器调试器中评估//li[2]/span,看看它首先选择了哪个<span>

如果这没有公开解释......不幸的是,根据我的经验,Selenium并没有正确地实现XPath规范。我不知道为什么,我同意这令人沮丧。但是,我认为在这种情况下知道它可能是Selenium的问题很有帮助,而不是你对XPath的错误理解。

如果您没有找到类似第一段中所述的解释,您可能不得不接受解决方法。值得庆幸的是,在这种情况下,您已使用//li[2]/span[@class='p-right']找到了解决方法。

答案 1 :(得分:0)

请尝试//li[2]//span,应该这样做。