2013-04-12 1 views
4

나는 테이블과 같이 있습니다셀레늄 xpath - 특정 내용이있는 테이블의 마지막 행을 선택하는 방법?

<table> 
    <th> 
    <td>Area</td><td># of errors</td> 
    </th> 
    <tr><td>school</td><td>23</td></tr> 
    <tr><td>student</td><td>0</td></tr> 
    <tr><td>school</td><td>17</td></tr> 
    <tr><td>student</td><td>0</td></tr> 
</table> 

는 어떻게 '학교'영역의 마지막 행을 선택할 수 있습니다.

최근까지 I는

//table//tr//td[contains(text(),'school')]/following::td 

assert_text으로 사용되며 value 0, 즉 제로 오류.

그러나 이제는 오류가있는 행을 고려해야하지만 오류가없는 '마지막'행은 영역을 고려해야합니다.

//table//tr//td[contains(text(),'school')]/following::td 

를 사용하여이 경우에 대해
는 잘못 23 오류가 첫 번째 행을 선택한다.

나는 tr[last()] 사용하여 시도 -

//table//tr[last()]//td[contains(text(),'school')]/following::td[2] 

을하지만 문제는 이번이 마지막 테이블 행을 선택한다는 것입니다 - 학생들을위한 것입니다. 나는 학교를위한 마지막 테이블 행을 원한다. (실제로는 모든 행의 마지막 테이블 행 옆에있다.) (이 여전히 '첫 번째'학교 행을 선택)

//table//td[contains(text(),'school')][last()]/following::td[2] 

그러나 그것은 작동하지 않았다 :

는 또한 시도했다.

나는 하나의 학교 행, 2 개의 학교 행 및 2 개 이상의 학교 행을 설명 할 수 있어야하므로 표현을 처리 할만큼 충분히 동적이어야합니다.

답변

5

'school'텍스트가 포함 된 요소를 검색하고 있지만 마크 업에는 'School'텍스트가 있고 XPath는 대소 문자를 구분합니다.

당신은 소문자로 대문자로 변환하여이 문제를 해결할 수 있습니다, 이것은 다음처럼 XPath를 만들 것 :

//td[contains(translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'school')][last()]/following::td[2] 

* 참고 *

내가 XPath2 낮은 사용하지 않았다 -case() 함수는 모든 브라우저에서 작동하지 않기 때문에 작동합니다.

* 편집 *이 될 것 대소 문자를 구분되는 새로운 태그는 XPath에 대한 업데이트

:

//tr[td[contains(translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'school')]][last()]/td[2] 

또는 대소 문자를 구분하지 않는 더 단순화 된 버전은 다음과 같습니다

//tr[td[contains(., 'school')]][last()]/td[2] 

(.는 텍스트()의 약자로, 원하는 경우 교환 할 수 있습니다)

당신은 아마 또한 문제가 IDE 여부에 있는지 궁금 할 것

//tr[td[.='school']][last()]/td[2] 
+0

이상한, 당신이 가지고있는 것은 그 때 일해야합니다. 사용중인 셀렌 버전과 API는 무엇입니까? – Ardesco

+0

@Ardesco는 기본적으로 적절합니다. 다시 편집 된 예제의 관점에서 다음을 시도해보십시오.'(// tr [td [. = 'school']]]) [last()]/following :: tr/td [2]'. –

+0

또는 위의 로스가 잘 작동합니다. :) – Ardesco

2

마지막 XPath를 사용하면 나에게 적합하며 마지막 '학교'를 선택합니다. 그래서 나는 ... 당신이 XPath를 사용하는 경우

또한, 때때로 위치 인덱서와 약간 까다로운, 그래서 약이 될 수 있습니다, 어떤 브라우저 등을 사용하는 모든 버전은 무엇 가서 물어 것

(//td[contains(text(),'School')])[last()]/following::td[2] 
+1

멀리 얻을 수 있습니다. Firebug에서이 XPath를 실행할 수 있습니까? – Arran

+1

firepath라는 또 다른 애드온을 찾으십시오. 그것은 방화범과 통합되어 매우 유용합니다. – Ardesco

관련 문제