Selenium Xpath:可以存储标签,但不能存储范围
我在页面上有以下HTML片段:Selenium Xpath:可以存储标签,但不能存储范围,selenium,xpath,Selenium,Xpath,我在页面上有以下HTML片段: <li class="underline group"> <label class="p-left">P</label><span class="p-right">1111</span> </li> P1111 以下selenium命令工作正常: <tr> <td>storeText</td>
<li class="underline group">
<label class="p-left">P</label><span class="p-right">1111</span>
</li>
P1111
以下selenium命令工作正常:
<tr>
<td>storeText</td>
<td>//li[2]/label</td>
<td>tmp</td>
</tr>
<tr>
<td>echo</td>
<td>${tmp}</td>
<td></td>
</tr>
storeText
//li[2]/label
tmp
回声
${tmp}
以下各项应能起作用,但不能起作用:
<tr>
<td>storeText</td>
<td>//li[2]/span</td>
<td>tmp</td>
</tr>
<tr>
<td>echo</td>
<td>${tmp}</td>
<td></td>
</tr>
storeText
//li[2]/span
tmp
回声
${tmp}
我找到的唯一解决方案是
//li[2]/span[@class='p-right']
,但情况就是这样吗?为什么默认情况下//li[2]/span
不起作用?请尝试//li[2]///span
,应该这样做。我要查找的第一件事是,文档中是否有一个更早的//li[2]/span
,在您要查找的…
之前,早期的span
没有class=“p-right”,也没有文本内容?因此,${tmp}
是第一个选择的//li[2]/span
的文本值,而不是您试图选择的文本值?这可以解释您看到的结果,包括您观察到的//li[2]//span
也“不起作用”。您是否尝试过在浏览器调试器中评估//li[2]/span
,以查看它首先选择了哪个
如果这还不能解释。。。不幸的是,根据我的经验,有几次Selenium没有正确地实现XPath规范。我不知道为什么,我同意这是令人沮丧的。然而,我认为知道在这种情况下可能是Selenium的问题是有帮助的,而不是您对XPath的错误理解
如果你找不到第一段中所述的解释,你很可能不得不采取变通办法。谢天谢地,在这种情况下,您已经找到了一个解决方法,可以使用
//li[2]/span[@class='p-right']
指定“不起作用”://li[2]/span
提供了什么?Xpath是最脆弱的。cssSelector将为您提供更大的灵活性。Driver.findElement(By.cssSelector(“li:nth child(2)>span”)).text。使用css选择器可以保证,如果结构发生变化,您的代码仍然可以工作Xpath@LarsH在硒中不起作用。不存储元素的文本,即使Xpath应该返回正确的元素。@bcar:我想知道css选择器如何比Xpath表达式更具适应性。它们看起来相当相似。@ MayStutoCou.com:当你报告某件事“不起作用”时,请考虑告诉我们实际发生了什么,因为你有权获得诊断信息,而我们不知道。@拉什:在这种情况下,它并不是那么多的信息。将存储空白字符串,而不是将实际内容存储在span中。对于标签,通过实际内容进行存储。为什么和label与span之间会有区别?@maythesource.com:与错误的非空白字符串或错误相反,它是空白字符串的信息可能是至关重要的。为什么标签和跨度之间存在差异。。。我不知道;我们可能会看到更多的HTML,例如早期的li
s和span
,我们可以看出。我已经尝试使用其他在线x-path测试器,并选择了正确的元素()。我将尝试更多,但我认为我同意您的观点,即selenium ide与xpath的关系有点不一致。。。很多虫子。他们需要修复它们。