我在页面上有以下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
不起作用?
答案 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
,应该这样做。