2010-07-12 9 views
1

last() 함수를 사용하여 주어진 xpath와 일치하는 마지막 노드를 찾는 방법을 알아 내려고합니다. 문제는 경로의 마지막 요소에도 제약 조건이 지정되어 있다는 것입니다. 내가일치 목록에서 마지막 노드 선택

"//div[@id='someId']/ul/li/div[@class='class1 class2 ']/span[@class='someType2 ']' and last()]" 

를 사용하는 경우

"//div[@id='someId']/ul/li/div[@class='class1 class2 ']/span[@class='someType2 ']" 

는 여전히 여러 노드와 일치합니다. 이유 중 하나는 경로의 마지막 div 태그에 2 개의 span 요소가 포함되어 있다는 것입니다. 위의 경로와 일치하는 마지막 노드를 선택하도록 도와주세요. 당신의 XML이 XHTML 인 경우

감사와 안부,
Vamyip

+0

좋은 질문 (+1). 완전한 설명과 정확한 해결책을 보려면 제 대답을보십시오. –

+0

저는 마지막 노드를 선택하는 데 관심이 있습니다. 그것을 xpath 또는 css 선택자가 되십시오. 그러니 제발 저를 도와주세요. 감사합니다 – vamyip

답변

1

, 왜 CSS 선택기를 사용하지 않는? 제가 잘못 본게 아니라면, 선택기 내가 너무 HTML 페이지에 XPath를 사용했다

#someId > ul > li > div.class1.class2 > span.someType2 

#someId > ul > li > div.class1.class2 > span.someType2:last 

해야하지만, CSS 선택기가 광범위하게되었을 때 나는 그들이 더 XPath는 이상의 브라우저에서 지원되는 것으로 나타났다.

+0

지정한 첫 번째 선택기가 올바르게 작동하고 첫 번째 요소와 일치합니다. 그러나 키워드 'last'는 선택기를 손상시키는 것 같습니다. 이 키워드에 대한 대체 구문이 있습니까? 감사합니다 – vamyip

+0

나는 그것을 테스트하고 그것을 작동합니다. 선택기 쿼리를 실행하고 어떤 플랫폼/브라우저에서 실행합니까? –

+0

셀레늄 - rc 스크립트에서 사용하고 있습니다. Firefox 용 Selenium IDE 플러그인을 추가하여 시험해 볼 수 있습니다. 사용하기 전에 작은 자습서를 참조해야합니다. http://seleniumhq.org 도움을 주셔서 감사합니다. 정말 감사합니다. – vamyip

1

사용 :

(//div[@id='someId']/ul/li/div[@class='class1 class2 '] 
            /span[@class='someType2 ']) 
              [last()] 

주의 마십시오 : //로 시작하는 표현을 둘러싼 괄호. 이것은 FAQ입니다. []//보다 강력하게 바인딩되므로 다른 우선 순위를 나타내려면 대괄호가 필요합니다.

+0

답장을 보내 주셔서 감사합니다. 나는 현재 셀레늄을 위해 Xpath를 사용하고 있고 둥근 괄호는 셀레늄을 위해 Xpath를 깰 수있다. 그렇지 않으면 당신의 대답은 완벽합니다, 그것은 완벽하게 xpath 뷰어뿐만 아니라 화재 xPath에서 작동합니다. 다시 한 번 감사합니다 – vamyip

+0

@vamyip : 죄송합니다. 이 경우 귀하의 질문은 XPath 질문이 아니며 "셀레늄 -xpath"로 분류되어야합니다. –

0

셀렌의 경우 자바 스크립트를 사용하여 요소를 검색 할 수도 있습니다. 어때?

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