2012-01-12 26 views
5

तक पहुंचें मेरे पास एक अद्वितीय आईडी के साथ div है। div के तहत span तत्वों का एक समूह है जिसमें className=foo है। className=foo के साथ कई span तत्व हैं लेकिन वे प्रत्येक div (यदि यह स्पष्ट है) के लिए अद्वितीय हैं। तो मेरी सेलेनियम कोड पहले अद्वितीय div हो जाता है के रूप में एक वेब तत्व तो उस तत्व लेने के लिए और वर्ग के नाम से प्राप्त करने के लिए span तोसेलेनियम वेबड्राइवर एक उप तत्व

element = sDriver.findElement(By.id("c_"+cID)); 
String sTest = element.findElement(By.className("actions")).getText(); 

दूसरी पंक्ति में यह एक अपवाद हर बार फेंकता तरह की कोशिश करता है

org.openqa.selenium.StaleElementReferenceException: Element not found in the cache - perhaps the page has changed since it was looked up 
Command duration or timeout: 22 milliseconds 

क्या मुझे गलत लगता है कि span को एक अद्वितीय div के अंतर्गत से कैसे प्राप्त करें?

उत्तर

7

नहीं अवधि तक पहुँचने you'right लेकिन समस्या यह है कि डोम StaleReferenceException के बाद से बदल गया है के बारे में है (StaleReferenceException देखें)

इस कारण हो सकता है, क्योंकि वह पृष्ठ पूरी तरह से लोड नहीं है जब कोड शुरू होता है या परिवर्तन है जब कोड निष्पादित किया जाता है। आप या तो तत्व के लिए थोड़ी देर प्रतीक्षा करने या StaleReferenceException को पकड़ने का प्रयास कर सकते हैं और div और span को फिर से ढूंढने का प्रयास कर सकते हैं।

+0

आप यहां [संभावित समाधान] (http://stackoverflow.com/a/7474518/1077279) के लिए भी जांच सकते हैं। – shamp00

+0

ऐसा लगता है कि अगर मैं नींद डालता हूं और कुछ सेकंड इंतजार करता हूं तो यह ठीक काम करता है। यह बताने का कोई अच्छा तरीका नहीं है कि पृष्ठ पूरी तरह से लोड हो गया है, मुझे लगता है कि दुर्भाग्यवश मुझे केवल नींद का उपयोग करने की आवश्यकता है – ducati1212

+0

आप दोनों नींद को जोड़ सकते हैं और अपवाद को पकड़ सकते हैं। नींद के बिना दोनों तत्वों को पहले स्थान पर एक्सेस करने का प्रयास करें और जब यह विफल हो जाए तो नींद का उपयोग करें और बाद में पुनः प्रयास करें – chaosr

1

मेरा समाधान फैंसी नहीं है लेकिन यह स्विस घड़ी (पाठ्यक्रम की मेरी स्थिति में) की तरह काम करता है। तो मेरा कोड पैरेंट तत्व को लूप में कॉल कर रहा है जिसमें विभिन्न बाल तत्वों की तलाश है। कुछ भी नहीं बदला गया - बस सरल पूछताछ और अपवाद शुरू हुआ। इसलिए! मैंने मूल तत्व की हर खोज से पहले थ्रेड स्लीप (2000) कमांड जोड़ा है और यह समस्या हल करती है। सुरुचिपूर्ण नहीं है लेकिन बाद में डीबग करने के लिए न्यूनतम कोड के साथ हर बार काम करता है।

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