在标签附近输入元素的 XPath?

XPath to input element near a label?

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

一个例子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>

目标是 select input 元素,以便我可以在 Selenium 中单击它。

根据我的理解,下面的 XPath 应该可以工作

//label[span[contains(string(),"admin_user")]]../input

问题是上面的方法有效,但只适用于 'admin' 而不是 'admin_user'。 仅与 'admin' 一起使用会得到多个结果。我只能猜测它与“_”有关,尽管它很容易成为我正在测试的网站的一个怪癖。 我也不能保证标签和输入的顺序,因此先上后下

您忘记重新升级了

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

下划线 (_) 在 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

选择包含在 div 中的 input 元素,该元素包含一个 label,其字符串值包含子字符串 admin_user.