2016-04-26 19 views
10

हाल ही में, मैंने देखा है एक नया लोकेटर कोणमापक प्रलेखन में जोड़ा जा रहा - by.js():प्रोटैक्टर/WebDriverJS में .js लोकेटर द्वारा क्या है?

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

मैं समझता हूँ कि इस लोकेटर प्रदान करता है, लेकिन मैं वास्तविक दुनिया उपयोग के मामलों याद आ रही है जब इस लोकेटर उपयोगी हो सकता है। by.css जैसे अन्य अंतर्निहित locators के बजाय मुझे by.js का उपयोग कब करना चाहिए?

उत्तर

12

मुझे लगता है कि जब भी css और अन्य तत्व लोकेटर मदद नहीं करेंगे या हमारे पास उपयोग नहीं कर सकते हैं, तो वे मुख्य जावास्क्रिप्ट फ़ंक्शंस का उपयोग कर तत्व प्राप्त कर सकते हैं। परिदृश्य -

  1. आप इसे browser.executeScript तो by.js को गुजर कोर जावास्क्रिप्ट कार्यों का उपयोग कर एक तत्व मिल रहा है तो यह जगह किया जा सकता है।

उदाहरण: -

var ele = element(by.js(function(){ 
    var ele1 = document.getElementById('#ele1'); 
    var ele2 = document.getElementById('#ele2'); 
    var val = ele1.compareDocumentPosition(ele2); 
    if(val === 4) return ele1; 
    else return ele2; 
})); 
  1. यदि आप रंग, फ़ॉन्ट इत्यादि जैसे सीएसएस मूल्यों का उपयोग करके तत्व प्राप्त करना चाहते हैं ... हालांकि filter इस मामले में उपयोग किया जा सकता है, लेकिन by.js भी इसका समर्थन करता है।
  2. तत्वों सीएसएस या xpath या किसी अन्य लोकेटर द्वारा सुलभ नहीं हैं, उदाहरण के लिए छद्म तत्वों है कि एनिमेशन या संक्रमण।

उदाहरण: -

हो, तो तत्व है जो :before और :after संक्रमण है मान लीजिए - by.js

.element:before { 
    color: rgb(255, 0, 0); 
} 

तत्व का रंग सत्यापित करने के लिए, हम इस्तेमाल कर सकते हैं एक जावास्क्रिप्ट बयान में गुजर तत्व प्राप्त करने के लिए -

var ele = element(by.js(function(){ 
    return window.getComputedStyle(document.querySelector('.element'), ':before'); 
})); 
expect(ele.getCssValue('color')).toEqual('rgb(255, 0, 0)'); 

उम्मीद है कि यह मदद करता है।

+0

दिलचस्प उपयोग के मामले, अब मैं कल्पना कर सकता हूं कि मैंने 'by.js' का उपयोग कहां किया होगा। धन्यवाद! – alecxe

+1

महान अंक! गणना के बारे में नोट प्यार है स्टाइल! –

5

मुझे लगता है कि इसके लिए मामले बहुत पतले हैं, लेकिन जब मैं क्लाइंट पर डेटा (या अविश्वसनीय रूप से) उपलब्ध नहीं है, तो मैं इसका उपयोग कर रहा हूं। वहाँ पर एक तृतीय पक्ष API अगर

var wideElement = element(by.js(function() { 
    var spans = document.querySelectorAll('span'); 
    for (var i = 0; i < spans.length; ++i) { 
    if (spans[i].offsetWidth > 100) { 
    return spans[i]; 
    } 
    } 
})); 
expect(wideElement.getText()).toEqual('Three'); 

वैकल्पिक रूप से, वहाँ एक उपयोग मामला हो सकता है:

spans[i].offsetWidth > 100 

संदर्भ में प्रयोग किया जाता है:

डॉक्स पृष्ठ पर उदाहरण offsetWidth के लिए एक संदर्भ शामिल हैं खिड़की या कुछ अन्य सेवा जो तत्व का पता लगाने में मदद कर सकती है।

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