我正在尝试引用包含下划线的特定名称标签旁边的复选框。
示例DOM看起来像
<div id="form-2143">
<div id="wrap-1353">
<label id="numberfield-1234-label">
<span class="x-form-label">admin_user </span>
</label>
<input type="checkbox" id="checkbox-1353"
class="form-field" componentid="cb1353">
</div>
...
</div>
目的是选择input
元素,以便我可以在Selenium中单击它。
以下XPath对我的理解应该有效
//label[span[contains(string(),"admin_user")]]../input
问题是以上情况有效但只有'admin'而不是'admin_user'。 仅使用'admin'即可获得多个结果。我只能猜测它与'_'有关,虽然它很容易成为我正在测试的网站的怪癖。 我也无法保证标签和输入的顺序,因此上升然后下降
答案 0 :(得分:3)
下划线(_
)在XPath(子)字符串测试中不需要特殊规定。
鉴于您的HTML已更正为格式良好,
<div id="form-2143">
<div id="wrap-1353">
<label id="numberfield-1234-label">
<span class="x-form-label">admin_user </span>
</label>
<input type="checkbox" id="checkbox-1353"
class="form-field" componentid="cb1353"/>
</div>
...
</div>
这个XPath,
//div[label[contains(., 'admin_user')]]/input
选择input
中包含的div
元素,其中包含label
,其字符串值包含子字符串admin_user
。
答案 1 :(得分:1)
你忘了再次升级
//label//span[contains(text(),'admin_user')]/../../input
例如:有两个“admin_user”和“admin_test”的例子
<div id="form-2143">
<div id="wrap-1353">
<label id="numberfield-1234-label">
<span class="x-form-label">admin_user</span>
</label>
<input type="checkbox" id="checkbox-1353" class="form-field" componentid="cb1353">
</div>
<label id="numberfield-1234-label">
<span class="x-form-label">admin_test</span>
</label>
<input type="checkbox" id="checkbox-1353" class="form-field" componentid="cb1353">
</div>
</div>