复选框元素的X路径,通过按值定位标签元素

时间:2015-01-13 11:04:28

标签: java html selenium xpath wicket

我已经在这方面工作了很长时间,但仍然没有找到特定于我在stackoverflow中的问题或者自己试验Xpath的答案。我很缺乏经验,所以如果这是一个简单的问题,我会嗤之以法,但我真的很感激任何帮助。

我正在与Selenium合作测试使用Wicket的网络应用。我需要Xpath到与相应标签相关的复选框。这是因为我需要能够输入标签上显示的值,并根据标签文本(例如“001”)找到相关的复选框,因为复选框ID与值不匹配。

下面的样例显示了复选框及其相应的标签;

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>

我还面临的另一个问题是Xpath必须包含它在html中显示的范围内的事实,因为页面上有3个其他复选框组具有相同的值,因此它必须特定于每个范围例如:

id="excludeDepotCheckBox5"

我尝试了以下X路无济于事;

//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]"

如果这是一个简单的语法/理解问题,我再说一遍,但我真的很感激任何帮助。

3 个答案:

答案 0 :(得分:2)

您可以使用以下xpath:

1 - 选中与标签'001'相关的复选框

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

2 - 选中与标签'009'相关的复选框

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

注意:它将检查'input'元素,它是label元素的第一个先前兄弟,在具有id ='excludeDepotCheckBox5'的span元素下具有精确的innerHTML / text为'001'或'009'。

答案 1 :(得分:2)

自&#34;前兄弟&#34;是如此容易出错(一旦HTML结构稍微改变就会中断),这里有一个更稳定的变体(为易读性而包装):

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

答案 2 :(得分:1)

// * [@ id中=&#39; excludeDepotCheckBox5&#39;] /标签[含有(文本(),&#39; 001&#39)] //前同辈::输入[1] < / p>