我正在使用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元素,因为我不知道这个数字。
答案 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'
)
)
);
。