我有这段代码
<label>
<input type="radio" checked="checked" value="fOejPdlZIx83HA" name="btnRad">
Test1
</label>
<label>
<input type="radio" checked="checked" value="fdsaf4waff4sssd" name="btnRad">
Test2
</label>
<label>
<input type="radio" checked="checked" value="fg43fasd43wsat4" name="btnRad">
Test3
</label>
我希望通过xpath
访问单选按钮,具体取决于标签文本我已经尝试了多种方法:
//input[@name='btnRad]']/following::*[contains(text(),'Test3')]
//label[text()='Test3']/input[@name='btnRad']
//*[contains(text(),'Test3')]
即使是最后一个也没有给我任何回报,所以xpath认为“Test3”不是标签的文字......任何人都知道如何做到这一点?
答案 0 :(得分:7)
您的表达式失败,因为您的label
有一个以上的文本节点:input
之前的空字符串和Test3
。您使用contains
的方式意味着它只会检查第一个文本节点,即空字符串。
解决这个问题的两种方法:
使用normalize-space()
消除空字符串:
//*[contains(text()[normalize-space()], 'Test3')]
查询每个text()
:
//*[text()[contains(.,'Test3')]]
有关更详细的说明,请参阅How to search for content in XPath in multiline text using Python?。
答案 1 :(得分:0)
这也适用于//label[contains(.,'Test3')]/input
。