一尘不染

如何检查元素是否包含特定的类属性

selenium

如何检查seleniumWeb元素是否包含特定的CSS类。

我有这个html li元素

<li class="list-group-item ng-scope active" ng-repeat="report in lineageController.reports" ng-click="lineageController.activate(report)" ng-class="{active : lineageController.active == report}">

如您所见,在class属性内部有一个活动类。

我的问题是我有这个元素,我想根据class属性是否具有其他“ active”值进行检查,这是比使用xpath更优雅的解决方案。

我怎样才能做到这一点?


阅读 308

收藏
2020-06-26

共1个答案

一尘不染

鉴于您已经找到了您的元素,并且您想检查class属性内的某个类:

public boolean hasClass(WebElement element) {
    String classes = element.getAttribute("class");
    for (String c : classes.split(" ")) {
        if (c.equals(theClassYouAreSearching)) {
            return true;
        }
    }

    return false;
}

编辑

正如@aurelius正确指出的那样,还有一种更简单的方法(效果不佳):

public boolean elementHasClass(WebElement element, String active) {
    return element.getAttribute("class").contains(active);
}

这种方法看起来更简单,但有一个很大的警告:

如@JuanMendes所指出的,如果要搜索的类名是其他类名的子字符串,则会遇到问题:

例如class =“ test-a test-b”,搜索class.contains(“ test”)将返回true,但应为false

编辑2

尝试结合两个代码段:

public boolean elementHasClass(WebElement element, String active) {
    return element.getAttribute("class").split(" ").contains(active);
}

那应该解决您的警告。

2020-06-26