2013-04-18 12 views
14

मैं अपने वेब पेज पर तत्व के लिए जाँच करने के लिए नीचे दिए गए कोड का उपयोग कर रहायदि एलिमेंट मौजूद नहीं है तो एलिमेंटमेंट बहुत धीमा है।

private boolean isElementPresent(By by) { 
try {  
     driver.findElement(by); 
     return true; 
    } catch (NoSuchElementException e) { 
     return false; 
    } 
    catch (Exception e) 
    {  
     return false; 
    } 

    } 

मैं एक विशेष क्षेत्र

isElementPresent(By.xpath(".//*[@id='header']"))); 

नीचे के रूप में परिणाम में दिखाई देने यदि मेरे कार्यक्रम में जाँच करने के लिए यदि यह इस मौजूद है जरूरत फ़ंक्शन जल्दी से पूरा हो जाता है लेकिन यदि ऊपर मौजूद नहीं है तो यह बहुत लंबा चल रहा है।

क्या कोई इस समस्या को हल करने में मेरी सहायता कर सकता है ताकि यह जांच जल्दी से की जा सके?

+0

xpath के बजाय सीएसएस लोकेटर का उपयोग करने का प्रयास करें? – Hemanth

+1

क्या आप किसी भी अंतर्निहित प्रतीक्षा का उपयोग कर रहे हैं? –

उत्तर

27

यहां आप कुछ याद कर रहे हैं, यही कारण है कि यह इंतजार कर रहा है यदि तत्व नहीं है। findElement एक तत्व के लिए निश्चित रूप से निर्दिष्ट समय की प्रतीक्षा करेगा। इसलिए उस विधि को उस समय शून्य पर सेट करने की आवश्यकता है।

isElementPresent(WebDriver driver, By by) { 
    driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS); 
    try { 
     driver.findElement(by); 
     return true; 
    } catch (NoSuchElementException e) { 
     return false; 
    } finally { 
     driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 
    } 
} 

वहाँ 4 महत्वपूर्ण यहाँ पर जा रहा चीजें हैं। क्रम में:

  1. implicity_wait को 0 पर सेट करना ताकि वेबड्राइवर पूरी तरह प्रतीक्षा न करे।

  2. तत्व मिलने पर सही लौट रहा है।

  3. NoSuchElementException को पकड़ना और झूठी वापसी करना जब हम पाते हैं कि तत्व अपवाद के साथ परीक्षण को रोकने के बजाय मौजूद नहीं है।

  4. कार्रवाई पूर्ण होने के बाद 30 पर वापस आना चाहिए ताकि वेबड्राइवर भविष्य में पूरी तरह इंतजार कर सके।

+0

धन्यवाद यह उपरोक्त कोड के साथ काम किया। मेरे मामले में जब ब्राउज़र लॉन्च किया जाता है। यूआरएल में एक फॉर्म है जो पोस्ट किया गया है और परिणाम को सर्वर से वापस प्राप्त करने में कुछ समय लगता है, इसलिए टाइमआउट मान को शून्य पर सेट करने से तत्व को नहीं मिला है। – user419534

+0

संकेत के लिए धन्यवाद! "इसलिए उस विधि को उस समय शून्य पर सेट करने की आवश्यकता है।" - पकड़े गए त्रुटियां; 2 सेकंड के लिए सेटअप बनाया और यह मेरे लिए एक आकर्षण की तरह काम शुरू किया! –

+0

नवीनतम एपीआई अपडेट किया गया है। ड्राइवर का उपयोग करें। प्रबंधन()। टाइमआउट()। ImplicitlyWait (नया टाइमस्पैन (0)); –

0

जाहिर है, अपवाद भेजना लंबा है क्योंकि आपका डोम बड़ा है और xpath तत्व प्राप्त करने का सबसे तेज़ तरीका नहीं है। लेकिन यदि आप xpath का उपयोग करना चाहते हैं, तो सर्वोत्तम पथ डालने का प्रयास करें और उस प्रकार के फ़ंक्शन से बचें जहां सबस्ट्रिंग जांच हो रही है।

आपका वास्तविक xpath: .//*[@id='header'] इतना लंबा लगता है क्योंकि आप अपने डोम के सभी टैग जांचते हैं। तो अगर आप जो टैग खोज रहे हैं उसे टैग करें, उदाहरण: आप इनपुट को पकड़ना चाहते हैं। आपका xpath उस //input[@id='1234'] की तरह शुरू होना चाहिए और यह सभी टैग देखने से छोटा होगा।

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