一尘不染

为什么XPath last()函数不能按我预期的那样工作?

selenium

我正在使用Java和Selenium编写测试。我需要将另一个元素内的最后一个元素,所以我使用last()函数,但问题是,当我申请时,它并不总是带给我最后一个:

//a//b[last()]

 <a> 
   <l>
     <b>asas</b> 
   </l>
   <b>as</b>
 </a>

得到<b>as</b>,它带给我:

<b>asas</b>

<b>as</b>

但是当我将其应用于:

 <a>      
   <b>asas</b> 
   <b>as</b>
 </a>

它带给我:

<b>as</b>

阅读 380

收藏
2020-06-26

共1个答案

一尘不染

这是XPath混乱的常见原因。 首先是简单的部分:

  • //a选择a文档中的所有元素。
  • //a//b选择b文档中属于a元素后代的所有元素。

到目前为止,正常的东西。 接下来是棘手的部分:

  1. b 兄弟姐妹中a元素之下)选择最后一个元素:
    //a//b[last()]
    

此处,过滤是b选择标准的一部分,因为[]优先级高于//

  1. 要选择 文档中 的最后一个b元素(在元素之下): __a
    (//a//b)[last()]
    

在此,由于last()所有优先b元素()均用于覆盖默认优先级,因此它是所有选定元素列表上的索引。

2020-06-26