用文本定位li的xpath不起作用

时间:2013-07-01 12:26:38

标签: xpath selenium-ide

使用xpath //ul//li[contains(text(),"outer")]在外部ul中查找li不起作用

<ul>
  <li>
   <span> not unique text, </span>
   <span> not unique text, </span>
   outer ul li 1
   <ul >
     <li> inner ul li 1 </li>
     <li> inner ul li 2 </li>   
   </ul>
  </li>
  <li>
   <span> not unique text, </span>
   <span> not unique text, </span>
   outer ul li 2
   <ul >
     <li> inner ul li 1 </li>
     <li> inner ul li 2 </li>   
   </ul>
  </li>
</ul>

知道如何在外部ul中找到具有特定文本的li吗?

谢谢

4 个答案:

答案 0 :(得分:12)

这对你有用//ul//li[contains(.,"outer")]

答案 1 :(得分:2)

使用Saxon运行它,原始的XPath表达式给出:

XPTY0004:不允许包含多个项目的序列作为第一个参数   contains()(“”,“”,...)

现在,我猜Selenium可能使用XPath 1.0而不是XPath 2.0,而在1.0中,contains()函数具有“第一项语义” - 它将其参数转换为字符串,如果参数是节点集包含多个节点,涉及仅考虑第一个节点。第一个文本节点可能是空格。

如果要测试某个子文本节点是否包含“外部”,请使用

//ul//li[text()[contains(.,"outer")]]

切换到XPath 2.0的另一个原因......

答案 2 :(得分:1)

我希望您只想考虑li的直接子节点的文本节点。因此,您使用text()是正确的(如果您使用contains(.,"outer"),则会考虑使用li的任何子项的文本。

因此请尝试:

//ul/li[text()[contains(.,'outer')]] 

答案 3 :(得分:0)

对于上述问题 -

此解决方案将起作用

// // UL李[含有(&#34;外&#34)]

&#34;&#34;选择当前节点