我正试图找出一种方法,使用last()函数找到与给定xpath匹配的最后一个节点。问题是路径的最后一个元素也有一个约束。
"//div[@id='someId']/ul/li/div[@class='class1 class2 ']/span[@class='someType2 ']"
如果我使用
"//div[@id='someId']/ul/li/div[@class='class1 class2 ']/span[@class='someType2 ']' and last()]"
它仍匹配多个节点。也许其中一个原因是路径中的最后一个div标签包含2个span元素。请帮我选择与上述路径匹配的最后一个节点。
谢谢和问候,
Vamyip
答案 0 :(得分:1)
如果您的xml是xhtml,为什么不使用CSS选择器? 如果我没弄错的话,选择器应该是
#someId > ul > li > div.class1.class2 > span.someType2
#someId > ul > li > div.class1.class2 > span.someType2:last
我也在html页面上使用xpath,但是当CSS选择器变得普及时,我发现它们在浏览器中比xpath更受支持。
答案 1 :(得分:1)
使用强>:
(//div[@id='someId']/ul/li/div[@class='class1 class2 ']
/span[@class='someType2 '])
[last()]
请注意:表达式周围的括号以//
开头。这是一个FAQ。 []
绑定强于//
,这就是为什么必须使用括号来表示不同的优先级。
答案 2 :(得分:0)
在selenium中,您还可以使用javascript来检索元素。这样的事情怎么样?
dom=var list1 =
document.getElementById('someId').
getElementsByTagName('li');
var finallist = new Array();
for (var i=0; i<list1.length; i++) {
var list2 = list1[i].getElementsByClassName("class1 class2");
for (var j=0; j<list2.length; j++) {
var list3 = list2[j].getElementsByClassName("someType2");
for (var k=0; k<list3.length; k++) {
finallist.push(list3[k];
}
}
}
finallist.pop()
http://seleniumhq.org/docs/04_selenese_commands.html#locating-by-dom