2013-07-03 11 views
9

हमारे वर्तमान स्वचालन (सेलेनियम/वेबड्राइवर/जावा का उपयोग करके) में, हम @FindByबहुत बड़े पैमाने पर उपयोग करते हैं। उदाहरण के लिए: का उपयोग कर, आईडी, नाम, className, सीएसएस, टैगनाम, LinkText, partialLinkText और xpath:वेबलिंग ढूंढना, सर्वोत्तम प्रथाओं

@FindBy(css="a[name='bcrumb']") protected List<WebElement> breadCrumbLinks; 
@FindBy(id="skuError")   protected WebElement skuError; 
@FindBy(className="reducedPrice") protected List<WebElement> reducedPrice; 
@FindBy(partialLinkText="Injinji RUN 2.0") protected WebElement playButton; 
@FindBy(linkText="annual member refund") protected WebElement annualMemberRefund; 
@FindBy(xpath="//li[@itemprop='price']") protected WebElement productPrice; 

परिभाषा के अनुसार, @FindBy निम्नलिखित का उपयोग कर एक चयनकर्ता ढूँढ सकते हैं।

हाल ही में, हमारे फ्रंट एंड देवों ने प्रस्तावित किया है कि हम 'test =' से शुरू होने वाली एक नई विशेषता वर्ग लागू करें। मुझे लगता है कि यह एक अच्छा विचार है क्योंकि हम @FindBy मूल रूप से उपयोग किए जाने वाले मानों के बजाय टेक्स्ट की उस अस्पष्टता को देखकर वेबइलेमेंट्स पा सकते हैं। मेरा सवाल यह है कि @FindBy की मौजूदा कार्यक्षमता को बेहतर बनाएगा या हमारे परीक्षणों में उपयोग किए जाने वाले वेब एलीमेंट्स का खोज करने का एक नया तरीका बनाएं?

उत्तर

12

सबसे पहले, कोई "सर्वोत्तम प्रथाएं" नहीं हैं, जो आपके विशेष संदर्भ में अच्छी तरह से काम करती हैं। क्षमा करें, यह मेरा पुराना पकड़ है ...

मैं कस्टम विशेषताओं के लिए प्रयास नहीं व्यतीत करूंगा जबतक कि आप मौजूदा दृष्टिकोण के साथ काम नहीं कर सकते। जहां संभव हो वहां मौजूदा लोकेटर (तर्क ढूंढें) का उपयोग करना पसंद करते हैं।

जब भी संभव हो, आईडी विशेषताओं का उपयोग करें। यदि पृष्ठ मान्य HTML है, तो पृष्ठ पर आईडी अद्वितीय हैं। वे प्रत्येक ब्राउज़र में संकल्प के लिए असाधारण रूप से तेज़ हैं, और यूआई नाटकीय रूप से बदल सकता है लेकिन आपकी स्क्रिप्ट अभी भी तत्व का पता लगाएगी।

कभी-कभी आईडी सही विकल्प नहीं होती हैं। जब आप ग्रिड नियंत्रण की तरह कुछ काम कर रहे हों तो गतिशील रूप से जेनरेट की गई आईडी लगभग गलत पसंद होती हैं। आप एक आईडी पर भरोसा करते हैं जो संभवतः विशिष्ट पंक्ति स्थिति से बंधे होते हैं और फिर आपकी पंक्ति में बदलाव होने पर आप खराब हो जाते हैं।

इनमें से कुछ मामलों में आपके देवता गतिशील रूप से जेनरेट किए गए आईडी मान को स्थिर मूल्यों को जोड़कर या पूर्ववत करके आपकी सहायता कर सकते हैं। एएसपी.नेट वेबफॉर्म गतिशील रूप से जेनरेट किए गए मानों के साथ पागल सामान करता है, इसलिए मैंने कई बार अपने लाभ के लिए प्रत्यय का उपयोग किया है।

लिंक टेक्स्ट, नाम विशेषता मान, और सीएसएस चयनकर्ता (JQuery शैली) बहुत अच्छे विकल्प हैं जब आप एक स्थिर, विश्वसनीय आईडी नहीं प्राप्त कर सकते हैं, या किसी के पास उपलब्ध नहीं है।

XPath लगभग सभी स्थितियों में मेरी आखिरी पसंद है। यह धीमा है, बेहद भंगुर हो सकता है, और यह एक जटिल XPath होने पर निपटने में मुश्किल है। उस ने कहा, अगर आपको अपने लोकेटर के लिए पेज डीओएम को ऊपर और नीचे ले जाना है, तो यह एकमात्र विकल्प है।

मौजूदा FindBy विधियों में से किसी एक का उपयोग करना मतलब है कि आप एक अच्छी तरह से समझी, अच्छी तरह से समर्थित लोकेटर रणनीति का उपयोग करेंगे। जब आप पुराने परीक्षण को समझने की कोशिश कर रहे हों, या जब आपकी टीम में कोई नया हो, तो यह एक बड़ा बोनस है।

यह मेरा $ 0.02 है।

+1

अच्छी तरह से कहा, जिम। यह मेरा जवाब है। – Brian

1

यदि मैं आपको सही ढंग से समझता हूं तो आप सीएसएस चयनकर्ताओं जैसे सीएसएस = "[test = '...']" के साथ @FindBy एनोटेशन का उपयोग जारी रख सकते हैं।

+0

हाँ, मुझे वह पता था। मेरा विशिष्ट सवाल यह है कि, FindBy को विस्तारित करना या एक नई कक्षा बनाना बेहतर है जो विशेषताओं को ढूंढने वाले तत्वों/तत्वों की खोज को संभाल सकता है जो वर्तमान FindBy सम्मेलनों का पालन नहीं करते हैं। – Brian

4

मुझे लगता है कि इस Selenium Locators Best Practices

tastiest लोकेटर मदद मिलेगी: आईडी नाम कक्षा लिंक पाठ या आंशिक टेक्स्ट

स्वादिष्ट लोकेटर सूचकांक XPath बाल तत्वों सीएसएस गुण खाद्य लोकेटर जेएस घटनाक्रम डोम तत्व कीस्ट्रोक समन्वय

+0

खराब एचटीएमएल लिंक। क्या आप इसे अपडेट कर सकते हैं? – djangofan

+2

इसे आजमाएं [LINK] (http://3qilabs.com/2012/02/best-practices-for-watir-and-selenium-locators-the-locator-tree-of-life/) या सिर्फ Google क्वेरी "बेस्ट वाटिर और सेलेनियम लोकेटर के लिए अभ्यास - जीवन के लोकेटर वृक्ष " – Stormy

+0

लिंक को वहां ले जाया गया था [http://3qilabs.com/best-practices-for-watir-and-selenium-locators-the-locator-tree- जीवन का/) –

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