23

बनाम चांदा में, वहाँ, मूल रूप से, 3 अगर एक तत्व मौजूद है की जाँच करने के तरीके हैं:चांदा में, browser.isElementPresent बनाम element.isPresent element.isElementPresent

var elm = element(by.id("myid")); 

browser.isElementPresent(elm); 
elm.isPresent(); 
elm.isElementPresent(); 

इन विकल्पों में बराबर और विनिमेय, कर रहे हैं और कौन सा आम तौर पर पसंद किया जाना चाहिए?

उत्तर

28

सूक्ष्म मतभेदों के साथ एक ही तरीके से सभी कार्य।

elm.isPresent() - -

  1. ElementFinder का ही विस्तार है और इतने waits for Angular किसी भी कार्रवाई निष्पादित करने से पहले पृष्ठ पर व्यवस्थित करने के लिए यहाँ कुछ मतभेद है कि मैंने पाया है।
  2. यह काम करता है जब elmelement(locator) या ElementFinder और ElementArrayFinder नहीं है। यदि locator निर्दिष्ट करके एकाधिक तत्व लौटाए जाते हैं तो पहले तत्व की जांच की जाती है यदि यह isEnabled() DOM में है। इनपुट के रूप में कोई पैरामीटर नहीं लेता है।
  3. कोणीय पृष्ठों और कोणीय तत्वों के साथ सबसे अच्छा काम करता है।
  4. किसी भी तत्व मौजूद होने पर खोजने की आवश्यकता होने पर उपयोग करने के लिए पहली प्राथमिकता है।

elm.isElementPresent(subLoc) -

  1. ElementFinder का ही विस्तार है और इसलिए किसी भी कार्रवाई निष्पादित करने से पहले पृष्ठ पर व्यवस्थित करने के लिए कोणीय के लिए इंतजार कर रहा है (जब वहाँ elm के लिए एक उप लोकेटर है)।
  2. अभिभावकों के उप तत्वों वाले तत्वों की उपस्थिति की जांच करने के लिए प्रयुक्त होता है। यह पैरामीटर के रूप में elm पर sub locator लेता है। (इस और elm.isPresent() के बीच केवल अंतर)
  3. कोणीय पृष्ठों और कोणीय तत्वों के साथ सबसे अच्छा काम करता है।
  4. जब भी माता-पिता का उप-तत्व मौजूद होता है तो जांच करने की आवश्यकता होने पर पहली प्राथमिकता का उपयोग करने की प्राथमिकता होती है।

browser.isElementPresent(element || Locator) -

  1. webdriver के एक कार्यान्वयन है और इतने व्यवस्थित करने के लिए कोणीय के लिए प्रतीक्षा नहीं करता है।
  2. एक पैरामीटर के रूप में locator या element लेता है और पहले परिणाम का उपयोग करता है यदि एकाधिक तत्व एक ही लोकेटर का उपयोग कर स्थित हैं।
  3. गैर-कोणीय पृष्ठों के साथ सबसे अच्छा उपयोग किया जाता है।
  4. गैर-कोणीय पृष्ठों पर परीक्षण करते समय उपयोग करने के लिए पहली प्राथमिकता।

डीओएम में किसी तत्व की उपस्थिति के लिए उपर्युक्त सभी चेक और boolean परिणाम लौटाएं। यद्यपि कोणीय और गैर-कोणीय विशेषताएं इन विधियों के उपयोग को प्रभावित नहीं करती हैं, लेकिन जब एक विधि डिफ़ॉल्ट रूप से व्यवस्थित करने के लिए कोणीय के लिए प्रतीक्षा करती है तो एक अतिरिक्त लाभ होता है और तत्व जैसे तत्व या संदर्भ तत्व तत्व अपवादों के कोणीय के मामले में त्रुटियों से बचने में मदद करता है, आदि ...

+0

यही वह उत्तर है जिसे मैं प्राप्त करने की उम्मीद कर रहा था। आपका बहुत बहुत धन्यवाद! मुझे उपस्थिति के इन 3 तरीकों को काफी भ्रमित करने की जांच होती है क्योंकि वास्तव में विधियों के बीच मतभेद हैं और यह स्पष्ट नहीं है कि विधियों का नाम कैसा दिख रहा है, इस पर अंतर क्या है। इसके अलावा, मतभेद सही ढंग से दस्तावेज नहीं हैं। उम्मीद है कि यह जवाब सिर्फ अंतर को भर देगा और भविष्य में दूसरों की मदद करेगा। – alecxe

4

मैं किससे बात नहीं कर सकता हूं, लेकिन मैं स्रोत कोड ढूंढने और इसकी जांच करने में सक्षम था।

दस्तावेज़ों के अनुसार, elm.isPresent() और elm.isElementPresent() समकक्ष हैं। उम्मीद है की वो मदद करदे।

Protractor API Docs

सिर्फ शीर्षक की दाईं ओर View code करने के लिए एक कड़ी है।

browser.isElementPresent (elm);

https://angular.github.io/protractor/#/api?view=webdriver.WebElement.prototype.isElementPresent

/** 
* Schedules a command to test if there is at least one descendant of this 
* element that matches the given search criteria. 
* 
* @param {!(webdriver.Locator|webdriver.By.Hash|Function)} locator The 
*  locator strategy to use when searching for the element. 
* @return {!webdriver.promise.Promise.<boolean>} A promise that will be 
*  resolved with whether an element could be located on the page. 
*/ 
webdriver.WebElement.prototype.isElementPresent = function(locator) { 
    return this.findElements(locator).then(function(result) { 
    return !!result.length; 
    }); 
}; 

elm.isPresent();

https://angular.github.io/protractor/#/api?view=ElementFinder.prototype.isPresent

/** 
* Determine whether the element is present on the page. 
* 
* @view 
* <span>{{person.name}}</span> 
* 
* @example 
* // Element exists. 
* expect(element(by.binding('person.name')).isPresent()).toBe(true); 
* 
* // Element not present. 
* expect(element(by.binding('notPresent')).isPresent()).toBe(false); 
* 
* @return {ElementFinder} which resolves to whether 
*  the element is present on the page. 
*/ 
ElementFinder.prototype.isPresent = function() { 
    return this.parentElementArrayFinder.getWebElements().then(function(arr) { 
    if (arr.length === 0) { 
     return false; 
    } 
    return arr[0].isEnabled().then(function() { 
     return true; // is present, whether it is enabled or not 
    }, function(err) { 
     if (err.code == webdriver.error.ErrorCode.STALE_ELEMENT_REFERENCE) { 
     return false; 
     } else { 
     throw err; 
     } 
    }); 
    }, function(err) { 
    if (err.code == webdriver.error.ErrorCode.NO_SUCH_ELEMENT) { 
     return false; 
    } else { 
     throw err; 
    } 
    }); 
}; 

elm.isElementPresent();

https://angular.github.io/protractor/#/api?view=ElementFinder.prototype.isElementPresent

/** 
* Same as ElementFinder.isPresent(), except this checks whether the element 
* identified by the subLocator is present, rather than the current element 
* finder. i.e. `element(by.css('#abc')).element(by.css('#def')).isPresent()` is 
* identical to `element(by.css('#abc')).isElementPresent(by.css('#def'))`. 
* 
* @see ElementFinder.isPresent 
* 
* @param {webdriver.Locator} subLocator Locator for element to look for. 
* @return {ElementFinder} which resolves to whether 
*  the subelement is present on the page. 
*/ 
ElementFinder.prototype.isElementPresent = function(subLocator) { 
    if (!subLocator) { 
    throw new Error('SubLocator is not supplied as a parameter to ' + 
     '`isElementPresent(subLocator)`. You are probably looking for the ' + 
     'function `isPresent()`.'); 
    } 
    return this.element(subLocator).isPresent(); 
}; 
+1

जो भी इसे नीचे गिरा देता है, वह हमें बताता है कि, जवाब मेरे लिए अच्छा क्यों दिखता है। – Ardesco

+3

मुझे लगता है कि डाउनवॉट्स कुछ भी समझाए बिना कॉपी-पेस्टिंग स्रोत कोड के लिए हैं। –

+0

नीचे नहीं आ गया है, लेकिन या तो ऊपर नहीं उठाया है। मुझे लगता है कि माइकल निश्चित रूप से डाउनवोट कारणों के बारे में सही है। भाग लेने और इसे देखने के लिए धन्यवाद! – alecxe

-3

आप देख सकते हैं कि क्या तत्व मौजूद है या नहीं isPresent समारोह का उपयोग करके।

तो, अपने कोड होगा की तरह कुछ:

var myElement = element(by.css('.elementClass')); 
expect(myElement.isPresent()).toBeFalsy(); 

Here isPresent समारोह के लिए चांदा डॉक्स है।

+3

धन्यवाद! यही समस्या है - वास्तव में प्रोटैक्टर में ऐसा करने के 3 तरीके हैं और यही सवाल है। – alecxe

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