How to check if element contains specific class attribute

前端 未结 7 1738
生来不讨喜
生来不讨喜 2021-02-05 02:09

How can I check if a selenium web element contains a specific css class.

I have this html li element

  • 相关标签:
    7条回答
    • 2021-02-05 02:14

      The answer provided by @drkthng works but you might have a case where the class name is a subset of another class name. For example:

      <li class="list-group-item ng-scope active">text</li>
      

      If you wanted to find the class "item" then the provided answer would give a false positive. You might want to try something like this:

      public boolean hasClass(WebElement element, String htmlClass) {
          String classes = element.getAttribute("class").split("\\s+");
          if (classes != null) {
              for (String classAttr: classes) {
                  if (classAttr.equals(htmlClass)) {
                      return true;
                  }
              }
          }
          return false;
      }
      
      0 讨论(0)
    • 2021-02-05 02:17

      Given you already found your element AND you want to check for a certain class inside the class-attribute:

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

      #EDIT As @aurelius rightly pointed out, there is an even simpler way (that doesn't work very well):

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

      This approach looks simpler but has one big caveat:

      As pointed out by @JuanMendes you will run into problems if the class-name you're searching for is a substring of other class-names:

      for example class="test-a test-b", searching for class.contains("test") will return true but it should be false

      #EDIT 2 Try combining the two code snippets:

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

      That should fix your caveat.

      0 讨论(0)
    • 2021-02-05 02:18

      Improving on @uesports135 answer, "classess" should be a String array.

       public boolean hasClass(WebElement element, String htmlClass) {
              String[] classes = element.getAttribute("class").split("\\s+");
              if (classes != null) {
                  for (String classAttr: classes) {
                      if (classAttr.equals(htmlClass)) {
                          return true;
                      }
                  }
              }
              return false;
          }
      
      0 讨论(0)
    • 2021-02-05 02:22

      Simmilar to previous one, but with java 8 capabilities:

      String classes= getDriver().findElement(someSelector).getAttribute("class");
      Optional<String> classFindResult = Arrays.stream(elementClasses.split(" ")).filter(el -> el.equals("myClass")).findFirst();
      if(openClassFindResult.isPresent()){
          return true;
      }
      return false;
      
      0 讨论(0)
    • Based on a common pre-classList javascript technique:

      public boolean hasClass(WebElement element, String theClass) {
          return (" " + element.getAttribute("class") + " ").contains(" " + theClass + " ");
      }
      
      0 讨论(0)
    • 2021-02-05 02:31

      Try using contains();

      String classes = divPubli.getAttribute("class");
      assertTrue("The element does not contain .maClass class .publi",classes.contains("maClass"));
      
      0 讨论(0)
    提交回复
    热议问题