2013-03-29 9 views
10

में त्रुटि समर्थित नहीं हैं मेरे पास divs में तत्वों की संख्या गिनने और उनकी संख्या वापस करने के लिए एक तरीका है।कंपाउंड क्लास नाम वेबड्राइवर

public int getNumberOfOpenBets() { 

     openBetsSlip = driver.findElement(By.id("form_open_bets"));   
     openBets = openBetsSlip.findElements(By.className(" cashout_noCash")); 
     return openBets.size(); 
    } 

पेज स्रोत

<form id="form_open_bets" method="post" name="form_open_bets"> 
<input type="hidden" value="" name="action"> 
<input type="hidden" value="" name="bet_id"> 
<input type="hidden" value="" name="cashout_price"> 
<input id="target_page" type="hidden" value="" name="target_page"> 
<div id="By.id" class="slipWrapper "> 
<div id="openBets_header"></div> 
<div id="cashout_1626" class=" cashout_noCash"> 
<div id="cashout_1625" class=" cashout_noCash"> 
<div id="cashout_1615" class=" cashout_noCash"> 
<div id="cashout_1614" class=" cashout_noCash"> 
<div id="cashout_1613" class=" cashout_noCash"> 
</div> 

WebDriver निम्न त्रुटि फेंक रहा है यही कारण है कि: यौगिक वर्ग नामों समर्थित नहीं हैं। एक वर्ग के नाम की खोज करने और परिणामों को फ़िल्टर करने या सीएसएस चयनकर्ताओं का उपयोग करने पर विचार करें।

org.openqa.selenium.InvalidSelectorException: Compound class names are not supported. Consider searching for one class name and filtering the results or use CSS selectors. 
For documentation on this error, please visit: http://seleniumhq.org/exceptions/invalid_selector_exception.html 
Build info: version: '2.31.0', revision: '1bd294d185a80fa4206dfeab80ba773c04ac33c0', time: '2013-02-27 13:51:26' 
System info: os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.7.0_17' 
Driver info: driver.version: unknown 
    at org.openqa.selenium.By.className(By.java:131) 
    at elements.betslip.Betslip.getNumberOfOpenBets(Betslip.java:136) 
    at testSomething(SomethingTest.java:117) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) 
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 

संपादित करें:

जैसा सामने आया WerbDriver वर्ग नामों में रिक्तियां का समर्थन नहीं करता, OMG। तत्वों को खोजने के लिए क्या आप कृपया इस सीट्यूशन में सीएसएस चयनकर्ता का उपयोग करने में मेरी मदद कर सकते हैं?

उत्तर

21

यह बिल्कुल अपेक्षित है। यदि आपके वर्ग के नाम में एक स्थान शामिल है, तो वेबड्राइवर इसे "कंपाउंड चयनकर्ता" के रूप में देखेगा। आप या तो अपने By.className() लोकेटर में स्थान हटा सकते हैं, जो अभी भी उन तत्वों को ढूंढना चाहिए जिन्हें आप ढूंढ रहे हैं; या आप By.cssSelector(".cashout_noCash") जैसे कुछ का उपयोग करके, सीएसएस चयनकर्ताओं द्वारा ढूंढने के लिए स्थानांतरित कर सकते हैं, जो समान कार्यक्षमता के लिए कहीं अधिक लचीलापन प्रदान करते हैं। अपवाद संदेश कहता है यह वही है।

+0

धन्यवाद जिम, पेज स्रोत लोकेटर, मैं सिर्फ devs :-) आप इस स्थिति में इस्तेमाल किया CSS चयनकर्ताओं का एक उदाहरण दे सकता है को मारने के लिए चाहता हूँ में रिक्तियों के साथ तत्वों के साथ भरा हुआ है? बहुत धन्यवाद, अटाना –

+0

आपको अधिक जानकारी देने के लिए मेरा उत्तर अपडेट किया गया। आपके नमूना शो जैसे एकल वर्ग के साथ, आपको उस मामले में सीएसएस चयनकर्ताओं का उपयोग करने की आवश्यकता नहीं है; केवल एक ही कक्षा का उपयोग करें जिसे आप ** ** बिना अंतरिक्ष के ढूंढ रहे हैं। 'By.className (" cashout_noCash ")' (कक्षा के नाम में कोई रिक्त स्थान नोट करें)। – JimEvans

1
driver.findElements(By.cssSelector(".cashout_noCash")); 
11

आप इनमें से किसी के बीच कोई अंतर नहीं छोड़कर कंपाउंड क्लास नाम चयनकर्ताओं को शामिल कर सकते हैं।
उदाहरण के लिए यदि आपके div है:
<div class="k-calendar-container k-popup k-group k-reset"></div>

तो अपने चयनकर्ता होगा:

driver.findElement(By.cssSelector("k-calendar-container.k-popup.k-group.k-reset")); 
+1

मेरे जीवन को बचाया धन्यवाद –

+5

cssselector स्ट्रिंग को "।" शुरुआत में भी। – user2875994

+0

मुझे अभी भी 'फेसबुक \ WebDriver \ Exception \ NoSuchElementException: तत्व का पता लगाने में असमर्थ: .t3-icon.t3-icon-actions.t3-icon-actions-document.t3-icon-document-view' अगर मैं चुनने का प्रयास करता हूं TYPO3 – Black

3

यहाँ एक रूबी जवाब है, तो किसी को भी यह की जरूरत है। निष्कर्ष मैं पहुंचा हूं कि ऊपर दिए गए जावा के लिए काम करने वाले कुछ समाधान मेरी मशीन पर काम नहीं करते हैं या रूबी के लिए बिल्कुल काम नहीं करते हैं (हालांकि मुझे यकीन नहीं है कि यह मामला क्या है)।

हैं एचटीएमएल है:

<a class="button orange-bg" href="http://www.MyCarmelHome.com" target="_blank"> 
    access web portal 
</a> 

खोजने के लिए प्रारूप इस तत्व होगा:

logInBtn = driver.find_element(:css, ".button.orange-bg") 

मैं इस प्रयोग किया जाता है क्योंकि निम्न कार्य नहीं करेगा:

  1. '।' के साथ रिक्त स्थान बदलना और सीएसएस चयनकर्ता द्वारा खोज (आपको सामने की अवधि डालना होगा)।

  2. कंपाउंड क्लास नाम में रिक्त स्थान को हटाकर और कक्षा नाम लोकेटर का उपयोग करना।

+0

में एक आइकन मेरे लिए बहुत समय बचाया! अरे, कक्षा में उन रिक्त स्थान। –

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