2014-04-09 5 views
1

코드를 다음과 같은 요소를 사용하여 텍스트를 찾을 수 없습니다 : 내가하고 싶은 것은 텍스트를 포함하여 특정 label 요소를 얻는 것입니다XPath는()

<label> 
<input class="class1" type="checkbox" checked="checked"/> 
       First text    
</label> 
<label> 
<input class="class2" type="checkbox" checked="checked"/> 
       Second text    
</label> 
<label> 
<input class="class3" type="checkbox" checked="checked"/> 
       Third text    
</label> 

.

//label[text()='First text'] 

//label[contains(text(),'First text')] 

를하지만 작품을 나던 : 나는 시도하고 있었다.

제발, 조언!

감사합니다. :)

답변

2
 
//label[text()[contains(., 'First text')]] 

귀하의 시도

 
//label[contains(text(),'First text')] 
<label>

에서
<label>[ 
]<input class="class1" type="checkbox" checked="checked"/>[ 
       First text    
]</label> 

텍스트 노드를 가지고 있기 때문에 가

이 작동하지 않습니다 라인을 제외한 아무것도 포함하지 않는 빈 하나를 깨져서 input 바로 앞에 있고 비어 있지 않은 것은 1 번째 e <input>. 위의 대괄호로 설명했습니다.

  • contains(node-set, string)과 같은 호출은 첫 번째 인수를 contains으로 변환하여 string으로 변환합니다.
  • 노드 집합을 문자열로 변환하면 첫 번째 노드 집합의 텍스트 콘텐츠가 제공됩니다. (시도해보십시오. string(label)은 얼마나 많은 라벨이 있더라도 공백을 많이 가지고 'First text'을 줄 것입니다.)
  • 그리고 그 경우 빈 텍스트 노드이므로 contains(text(),'First text')은 절대로 성공하지 못합니다.

따라서 텍스트 노드를 개별적으로 테스트해야하며 위에 표시된 것과 같이 중첩 조건부로 완료해야합니다.

+0

위대한 !! 고맙습니다! :) – niemeczek