我正在寻找关于如何编写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”)将为已选中和未选中的框传递。
答案 0 :(得分:0)
如果您需要匹配包含"Evaluations"
文字的标签,您可以尝试
//label[@for="access_evaluations_viewing"][contains(text(), "Evaluations")]/preceding::div[@class="checkradios-checkbox checkradios access icon-checkradios-checkmark checked"]
答案 1 :(得分:0)
这四个元素是兄弟姐妹,所以当你在Label时,你必须去上面的Div来获取复选框元素。
试试这个XPath:
//div[@class='panel-body']/label[contains(.,'Evaluations')]/preceding-sibling::div[1]