仅当元素的标签包含特定文本时,才会检查Selenium IDE / Xpath验证复选框

时间:2016-11-21 17:03:25

标签: html selenium xpath

我正在寻找关于如何编写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 个答案:

答案 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]