2013-11-22 24 views
7

मैं एक तत्व मौजूद है, तो जाँच करने के लिए इससे पहले कि मैं इस लाइन पर अमल कर सकते हैं कोशिश कर रहा हूँ:चेक अगर तत्व मौजूद है - सेलेनियम/जावास्क्रिप्ट/नोड js

driver.findElement(webdriver.By.id('test'));

यह एक त्रुटि "ऐसी कोई तत्व" फेंकता यदि आईडी test दस्तावेज़ में मौजूद नहीं है, यहां तक ​​कि try -block में भी। मुझे जावा के लिए जवाब मिल गए हैं, जहां आप यह जांच सकते हैं कि आकार 0 है, लेकिन नोड-जेएस में यह आकार जांचने से पहले एक त्रुटि फेंकता है।

throw error; ^ NoSuchElementError: no such element

+0

क्या आप इसका उपयोग नहीं कर सकते हैं: यदि (webdriver.By.id ('test')) {driver.findElement (webdriver.By.id ('test')); }। – JeffreyZ

+0

findElements() और आकार() – epascarello

+0

@ user2389688 webdriver.by.id ("कुछ भी") हमेशा सत्य साबित होता है। –

उत्तर

24

आप then() की वैकल्पिक त्रुटि हैंडलर तर्क का लाभ उठा सकें।

driver.findElement(webdriver.By.id('test')).then(function(webElement) { 
     console.log('Element exists'); 
    }, function(err) { 
     if (err.state && err.state === 'no such element') { 
      console.log('Element not found'); 
     } else { 
      webdriver.promise.rejected(err); 
     } 
    }); 

मैं यह स्पष्ट रूप से दस्तावेज में कहा गया है नहीं मिल सकता है, लेकिन selenium-webdriver मॉड्यूल स्रोत में webdriver/promise.js में समारोह परिभाषा से निर्धारित:

/** 
    * Registers a callback on this Deferred. 
    * @param {Function=} opt_callback The callback. 
    * @param {Function=} opt_errback The errback. 
    * @return {!webdriver.promise.Promise} A new promise representing the result 
    *  of the callback. 
    * @see webdriver.promise.Promise#then 
    */ 
    function then(opt_callback, opt_errback) { 
+3

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

+2

जब तक ओप को पाइथन का उपयोग करने पर गलत नहीं किया जाता है, जावास्क्रिप्ट नहीं, यह सही जवाब होना चाहिए। वोट दिया!मेरे मामले में – mekdev

+0

, 'err' ऑब्जेक्ट में "स्थिति" प्रोप नहीं है। अगर मैं कंसोल लॉग इन करता हूं तो यह लौटाता है '{NoSuchElementError: ऐसा कोई तत्व नहीं: तत्व का पता लगाने में असमर्थ: {"विधि": "सीएसएस चयनकर्ता", "चयनकर्ता": "img"} '। और दूसरी स्थिति 'टाइपरर' लौटाती है: अपरिभाषित ' – RZKY

-2

ध्वनि आप अगर अपने गुण मौजूद हैं जाँच करना चाहते हैं, जैसे पहले:

if (webdriver.By.id) { 
    driver.findElement(webdriver.By.id('test')); 
} else { 
    console.error("Whoa, webdriver.By.id is not actually a function!"); 
} 
1

चयनित जवाब अपेक्षा के अनुरूप काम नहीं किया था (err.stateundefined था और एक NoSuchElementError हमेशा फेंक दिया गया था) - हालांकि वैकल्पिक कॉलबैक का उपयोग करके की अवधारणा अब भी काम करता है।

चूंकि मुझे ओपी के संदर्भ में एक ही त्रुटि मिल रही थी, मुझे लगता है कि लक्षित तत्व मौजूद है या नहीं, यह निर्धारित करते समय NoSuchElementError का संदर्भ दिया जाना चाहिए। चूंकि इसका नाम तात्पर्य है कि एक तत्व मौजूद नहीं होने पर त्रुटि को फेंक दिया जाता है। तो errorCallback में हालत होना चाहिए:

err instanceof webdriver.error.NoSuchElementError

तो पूरा कोड ब्लॉक के रूप में निम्नानुसार होगा (मैं भी है कि वाक्य रचना का लाभ लेने वाले लोगों के लिए async/await उपयोग कर रहा हूँ):

var existed = await driver.findElement(webdriver.By.id('test')).then(function() { 
    return true;//it existed 
}, function(err) { 
    if (err instanceof webdriver.error.NoSuchElementError) { 
     return false;//it was not found 
    } else { 
     webdriver.promise.rejected(err); 
    } 
}); 
//handle value of existed appropriately here 
संबंधित मुद्दे