我已经在这方面工作了很长时间,但仍然没有找到特定于我在stackoverflow中的问题或者自己试验Xpath的答案。我很缺乏经验,所以如果这是一个简单的问题,我会嗤之以法,但我真的很感激任何帮助。
我正在与Selenium合作测试使用Wicket的网络应用。我需要Xpath到与相应标签相关的复选框。这是因为我需要能够输入标签上显示的值,并根据标签文本(例如“001”)找到相关的复选框,因为复选框ID与值不匹配。
下面的样例显示了复选框及其相应的标签;
相应的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]"
如果这是一个简单的语法/理解问题,我再说一遍,但我真的很感激任何帮助。
答案 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>