如何使用xpath从特定ul元素中选择最后一个span元素?

时间:2016-02-09 13:51:08

标签: xpath

我正在使用Selenium自动化一些Web测试,需要通过xpath选择元素。

<ul class="class1">
      <div>
        ...
            <span class="spanClass"> Text </span>
        ...
      </div>
</ul>
<div class="class2">
      <div>
        ...
            <span class="spanClass"> Text </span>
        ...
      </div>
</div>

如果我使用xpath:

(//ul[@class='class1']//span)[last()]

这将从div class2中选择最后一个span元素。但我需要ul class1中的最后一个span元素。

根据我的理解,我需要使用“.//span”而不是“// span”,所以我尝试了:

(//ul[@class='class1'].//span)[last()]

但这不是一个有效的表达方式。但是,如果我这样做:

(//ul.//span)[last()]

现在这是一个有效的表达式,但不保证我使用正确的ul元素作为节点(对于我想要的东西,它似乎也是不正确的)。所以这不起作用。

我想只选择ul class1中的最后一个span元素。对于ul class1和div class2,将存在未知数量的相同span元素。所以我不能选择第N个span元素,因为我不知道这个数字。

1 个答案:

答案 0 :(得分:1)

(//ul[@class='class1']//span)[last()]应该做你想要的。表达式表示查找span内的所有ul[@class='class1'],并仅返回最后一个<root> <ul class="class1"> <div> ... <span class="spanClass"> Text 1</span> ... </div> </ul> <div class="class2"> <div> ... <span class="spanClass"> Text 2</span> ... </div> </div> </root> 。查看演示here。给定输入HTML如下:

<span class="spanClass"> Text 1</span>

..输出为(//ul.//span)[last()],如所需。

最后一个表达式<span>虽然有效,但却没有按照您的想法执行。它会尝试在 <ul.> (注意点)元素中查找所有<span>,然后仅返回找到的最后一个 array( 'Orange', 'Grape', 'Banana' => array( 'Big', 'Small' ), 'Apple' => array( 'Red', 'Green' => array( 'Soft', 'Hard' ) ) );