2015-09-22 8 views
11

कैसे जांचें कि सेलेनियम वेब तत्व में एक विशिष्ट सीएसएस क्लास है या नहीं।यह जांचने के लिए कि तत्व में विशिष्ट श्रेणी विशेषता

मैं तुम्हें वर्ग के अंदर देख सकते हैं विशेषता एक सक्रिय वर्ग है इस एचटीएमएल 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}"> 

है।

मेरी समस्या यह है कि मेरे पास यह तत्व है और मैं क्लास एट्रिब्यूट में दूसरों के बीच "सक्रिय" मान है, तो xpath का उपयोग करके अधिक सुरुचिपूर्ण समाधान होने पर यह जांच करना चाहता हूं।

मैं यह कैसे कर सकता हूं?

उत्तर

16

को देखते हुए आप पहले से ही अपने तत्व पाया जाता है और आप वर्ग विशेषता के अंदर एक निश्चित वर्ग के लिए जाँच करना चाहते हैं:

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.contains के लिए खोज ("परीक्षण") सही वापस आ जाएगी, लेकिन यह गलत

+1

classes.contains ("सक्रिय") पर्याप्त, इस के लिए धन्यवाद है! – aurelius

+1

हाँ! मेरा जवाब अपडेट किया गया! अच्छा मुद्दा आदमी! – drkthng

+0

इसमें शामिल होने के लिए धन्यवाद! – aurelius

6

@drkthng काम करता है द्वारा प्रदान की जवाब होना चाहिए लेकिन आप एक मामले में जहां वर्ग के नाम एक और वर्ग के नाम का एक सबसेट है हो सकता है। उदाहरण के लिए:

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

यदि आप कक्षा "आइटम" ढूंढना चाहते हैं तो प्रदान किया गया उत्तर झूठी सकारात्मक देगा। आप कुछ इस तरह की कोशिश करना चाहते हो सकता है:)

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

आप सही हैं! धन्यवाद! – aurelius

0

शामिल उपयोग करने का प्रयास (;

String classes = divPubli.getAttribute("class"); 
assertTrue("The element does not contain .maClass class .publi",classes.contains("maClass")); 
+0

यह सही समाधान नहीं है- उदाहरण के लिए जब आप 'nav' की तलाश में हैं तो यह विफल नहीं होगा और आपके पास 'nav-item' क्लास है। – Krystian

1

समान पिछली बार की है, लेकिन जावा के साथ 8 क्षमताओं:

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

classFindResult को openClassFindResult नहीं देखा जाना चाहिए, और टर्नरी ऑपरेटर का उपयोग करने के लिए थोड़ा अधिक सुरुचिपूर्ण होगा। वैसे भी, आपके पास पहले से ही मेरा अपवर्त है। – aurelius

संबंधित मुद्दे