XPath在标签附近输入元素?

时间:2017-03-12 19:37:32

标签: html xml selenium xpath

我正在尝试引用包含下划线的特定名称标签旁边的复选框。

示例DOM看起来像

<div id="form-2143">
  <div id="wrap-1353">
    <label id="numberfield-1234-label">
      <span class="x-form-label">admin_user&nbsp</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'即可获得多个结果。我只能猜测它与'_'有关,虽然它很容易成为我正在测试的网站的怪癖。 我也无法保证标签和输入的顺序,因此上升然后下降

2 个答案:

答案 0 :(得分:3)

下划线(_)在XPath(子)字符串测试中不需要特殊规定。

鉴于您的HTML已更正为格式良好,

<div id="form-2143">
  <div id="wrap-1353">
    <label id="numberfield-1234-label">
      <span class="x-form-label">admin_user&nbsp;</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>

enter image description here