我正在寻找一些关于如何编写Xpath查询以验证是否选中了特定复选框的指导(嵌套在panel-body div中的div是复选框) . 我试图做的是确保带有包含文本“Evaluations”的相应标签的复选框div包含“已检查”类 . 这是我的HTML:
<div class="panel-body">
<div class="checkradios-checkbox checkradios access icon-checkradios-checkmark checked">
<input id="access_conferences" class="checkradios access" name="access_conferences" value="true" checked="" type="checkbox">
</div>
<label for="access_conferences">Conferences</label>
<br>
<div class="checkradios-checkbox checkradios access icon-checkradios-checkmark checked">
<input id="access_evaluations_viewing" class="checkradios access" name="access_evaluations_viewing" value="true" checked="" type="checkbox">
</div>
<label for="access_evaluations_viewing">Evaluations - Viewing</label>
<br>
</div>
这是我的Xpath: //label[@for="access_evaluations_viewing"]/preceding::div[@class="checkradios-checkbox checkradios access icon-checkradios-checkmark checked"]
问题是我的测试用例即使在未选中该框时也会通过,这告诉我我的xpath正在抓取其他元素 . panel-body div中的其他一些复选框也将被检查,所以我认为可能发生的是我的Xpath正在检查下一个前面的div与一个“已检查”类,而不管div的标签是什么文本包含的内容 .
编辑:如建议的那样,我尝试引用标签前面的div . 这样做的问题在于,不一定要检查面板体中的每个盒子 . 我只需要确认检查与“评估”相关的那些 . 当取消选中除“评估”之外的一个或多个框时,引用标签上方的div将失败 . 这是我修改过的Xpath:
//label[@for="access_evaluations_viewing"]/preceding-sibling::div[contains(@class, "unchecked")]
我切换到负面比较,因为包含(@class,“checked”)将为已检查和未选中的框传递 .
2 回答
如果您需要匹配包含
"Evaluations"
文本的标签,您可以尝试这四个元素是兄弟,所以当你在Label时,你必须到上面的Div来获取checkbox元素 .
Try this XPath: