2015-01-13 3 views
1

나는 꽤 오랫동안이 작업을 해오 고 있으며 stackoverflow 또는 Xpath로 직접 실험 한 결과를 찾지 못했습니다. 나는 아주 경험이 없기 때문에 이것이 단순한 문제라면 나는 동행한다. 그러나 나는 어떤 도움을 정말로 감사 할 것이다.체크 박스 요소에 대한 Xpath는 값 옆에있는 레이블 요소를 찾습니다.

Wicket을 사용하는 웹 응용 프로그램을 테스트하기 위해 Selenium과 협력하고 있습니다. 각각의 라벨과 관련된 체크 박스에 Xpath가 필요합니다. 왜냐하면 확인란에 표시된 값을 입력 할 수 있어야하고 체크 상자 ID가 값과 일치하지 않으므로 "001"과 같은 레이블 텍스트를 기반으로 관련 확인란을 찾을 수 있어야합니다.

아래의 모형은 확인란과 해당 레이블을 보여줍니다.

mockup

대응 HTML 아래 표시이고;

<span wicket:id="excludeDepotCheckBox" id="excludeDepotCheckBox5"> 

    <input name="adminPreferenceSection:excludeDepotCheckBox" type="checkbox" value="0" id="excludeDepotCheckBox5-adminPreferenceSection:excludeDepotCheckBox_0"> 
    <label for="excludeDepotCheckBox5-adminPreferenceSection:excludeDepotCheckBox_0">001</label> 

    <br> 

<input name="adminPreferenceSection:excludeDepotCheckBox" type="checkbox" value="1" id="excludeDepotCheckBox5-adminPreferenceSection:excludeDepotCheckBox_1"> 
    <label for="excludeDepotCheckBox5-adminPreferenceSection:excludeDepotCheckBox_1">009</label> 

    <br> 

</span> 

I는 직면하는 또 다른 문제는 XPath는 그것이 특정 있어야하므로 체크 박스 (3 개) 다른 그룹이 동일한 값으로 페이지가있는 것처럼 HTML에 나타낸 범위 안에 있다는 사실을 포함해야한다는 예 : 각 범위에 대해

id="excludeDepotCheckBox5" 

다음 Xpath를 사용해 보았습니다.

//span[@id='excludeDepotCheckBox5' and contains(., '009')]" 

"//*[@id='excludeDepotCheckBox5' and ./label/text()='009']/preceding-sibling::*[@name='adminPreferenceSection:excludeDepotCheckBox'] 

//*[@id='excludeDepotCheckBox5' and ./label/text()='009']/preceding-sibling::input[1]" 

다시 간단한 구문/이해 문제가 있지만 나는 정말로 도움이된다고 생각한다.

답변

2

"선행 - 형제 "(HTML 구조가 조금 변화로 즉시 중단됩니다), 여기 (가독성을위한 포장)보다 안정적인 변형입니다 때문에 오류가 발생하기 쉬운입니다 :

//span[@id = 'excludeDepotCheckBox5']//input[ 
    @id = //span[@id = 'excludeDepotCheckBox5']//label[normalize-space() = '001']/@for 
] 
+0

이것은 훌륭한 답변이며 완벽하게 작동합니다. 감사합니다. 감사합니다. – Laura

2

당신은 아래 XPath를 사용할 수 있습니다 관련된 확인란을 선택 를 들어

//span[@id='excludeDepotCheckBox5']/label[.='001']/preceding-sibling::input[1] 

2 : '001' 라벨 관련 확인란을 선택 를 들어

1을 '009'레이블 :

//span[@id='excludeDepotCheckBox5']/label[.='009']/preceding-sibling::input[1] 

참고 : id = 'excludeDepotCheckBox5'인 스팬 요소 아래에서 정확히 innerHTML/text가 '001'또는 '009'인 레이블 요소의 첫 번째 선행 형제 요소 인 'input'요소를 확인합니다.

+0

이 체크 박스 중 하나 개 세트하지만 위대한 작품 I 선택할 수있는 확인란을 선택하는 방법을 포함하여 arisalexis 대답을 사용해야했던 동일한 값을 가진 여러 확인란을 사용했습니다. 내가 그 사람에게 변경을해야만했는데, 그때는 그 체크 박스보다 이전의 체크 박스를 선택했다. – Laura

+0

오케이 .. 위의 내 대답을 편집했습니다. 지금 귀하의 목적에 부합하는지 확인하십시오. 감사..:) – Subh

+0

감사합니다 Subh이 지금도 완벽하게 작동합니다. span 포함 여부에 관계없이 – Laura

1

// */라벨 [ID = 'excludeDepotCheckBox5'@] [포함 (텍스트(), '001')] // 선행 - 형제 : 입력 [1] 이후

+0

이 대답은 위의 내용을 입력 한 후에 [1]을 추가해야만 해당 확인란이 나타나고 그 전에는 해당하지 않습니다. – Laura