如何制定一个 xpath 表达式来检查复选框是否被选中?

How to formulate an xpath expression to check if checkbox is checked?

我是 xpath 的新手,正在尝试制定一个 xpath 表达式来检查复选框是否被选中。

这是我的 html,

<label><input type='checkbox' name='name[]' class="some-class-name" /> Text 1</label>
<label><input type='checkbox' name='name[]' class="some-class-name" checked /> Text 2</label>

我有这个 xpath 表达式,但我没有得到任何结果,

//*[contains(text()[normalize-space()], " Text 1 ")] //input[@type="checked" and not(@checked)]

如何使用 xpath 测试 "Text 1" 复选框是否被选中?

下面的 XPath 表达式应该select你想要的:

//*[@type="checkbox" and not(@checked)][contains(normalize-space(following-sibling::text()[position()="1"]), "Text 1")]

那个returns这个元素:

<input type="checkbox" id="id" name="name[]" />

备注:

  • following-sibling::text()[position()='1']部分是这里最重要的部分;这意味着,第一个 后面的同级是文本节点
  • 使用形式contains(normalize-space(…), "Text 1")检查文本节点的值。特别注意 "Text 1"——你不想使用原来的 contains(normalize-space(…), " Text 1 ") 形式,因为 " Text 1 " 中的空格会导致它失败。当您使用 normalize-space(…) 时,您要求从文本节点中删除那些前导空格和尾随空格。因此,您需要检查是否匹配删除这些空格后文本节点的外观,即 "Text 1".