2012-12-03 25 views
7

क्या यह जांचने के लिए वैसे भी है कि सेलेनियम वेब ड्राइवर में कोई तत्व मौजूद है या नहीं? मैं इस कोड का उपयोग करने का प्रयास करें:जांचें कि तत्व मौजूद है

if @driver.find_element(:link, "Save").displayed? == true 

लेकिन यह अपवाद में टूट जाएगा, जो मैं क्या उम्मीद नहीं है, क्योंकि मैं अभी भी स्क्रिप्ट चलाने जारी रखना चाहते हैं।

उत्तर

6

@driver.find_elementNoSuchElementException नामक अपवाद फेंकता है।

तो आप अपनी खुद की विधि लिख सकते हैं जो कोशिश पकड़ ब्लॉक का उपयोग करता है और जब कोई अपवाद नहीं होता है तो कोई अपवाद नहीं होता है और गलत होता है।

+1

धन्यवाद, मैं "बचाव" का उपयोग करता हूं और यह समस्या हल करने के लिए – Thanh

+0

Gr8 हल करता हूं .. अगर इससे मदद मिली तो आपको जवाब स्वीकार करना चाहिए। –

+0

मेरे पास अभी आपका जवाब स्वीकार करने के लिए पर्याप्त प्रतिष्ठा नहीं है (लेकिन न्यूनतम 15), लेकिन मुझे इस समय आपको देय है, मैं बाद में आपका जवाब स्वीकार करूंगा :) – Thanh

7

मैं नहीं रूबी विशेषज्ञ हूँ और कुछ वाक्य रचना त्रुटियाँ बना सकते हैं, लेकिन आप सामान्य विचार प्राप्त कर सकते हैं:

if @driver.find_elements(:link, "Save").size() > 0 

इस कोड NoSuchElementException

फेंक नहीं है लेकिन इस विधि होगा थोड़ी देर के लिए "लटका" यदि आपके पास implicitlyWait शून्य से अधिक है और पृष्ठ पर कोई तत्व नहीं है। दूसरा मुद्दा - यदि पृष्ठ पर मौजूद तत्व मौजूद है लेकिन प्रदर्शित नहीं होता है तो आपको true मिल जाएगा।

वैकल्पिक हल के लिए बनाने के लिए विधि का प्रयास:

def is_element_present(how, what) 
    @driver.manage.timeouts.implicit_wait = 0 
    result = @driver.find_elements(how, what).size() > 0 
    if result 
     result = @driver.find_element(how, what).displayed? 
    end 
    @driver.manage.timeouts.implicit_wait = 30 
    return result 
end 
+0

सुझाव के लिए धन्यवाद, मुझे अब "hang" विधि का इंतजार नहीं करना है – Thanh

+0

implicit_wait क्यों आवश्यक है? क्या यह बेहतर नहीं है क्योंकि यह सुनिश्चित करेगा कि पूरे पृष्ठ को लोड करने के बाद तत्व मौजूद है? या क्या मैं इसे समझने में गलत हूं? मेरी मदद करो! –

1

यह उस तत्व कोई बात नहीं मैं क्या लगता है यह उपयोगी है, एक selenium wait objectelement.displayed? साथ उपयोग करने के लिए नहीं बल्कि begin/rescue का उपयोग करने से पेज पर होना चाहिए उम्मीद जाती है:

wait = Selenium::WebDriver::Wait.new(:timeout => 15) 
element = $driver.find_element(id: 'foo') 
wait.until { element.displayed? } ## Or `.enabled?` etc. 

यह उन उदाहरणों में उपयोगी है जहां पृष्ठ के कुछ हिस्सों को दूसरों की तुलना में उचित रूप से प्रस्तुत करने में अधिक समय लगता है।

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