6

में कोई विशेषता नहीं वाले तत्व को एक्सेस करना वॉटर का उपयोग करना, क्या तत्वों के बिना तत्व तक पहुंचने का कोई तरीका है?वॉटर

उदाहरण के लिए:

<span>Text</span> 

मैं xpath का उपयोग कर से बचने के लिए चाहते हैं, लेकिन यह है कि अगर एक ही रास्ता है, यह अच्छा है।

उत्तर

10

पहले स्थान पर टैग होने के गैर-वाटर मुद्दों को अस्वीकार करना, या अपने डेवलपर्स (या स्वयं) से अद्वितीय विशेषताओं का अनुरोध करना, आप हमेशा अपने मूल तत्वों या सूचकांक के माध्यम से किसी तत्व को एक्सेस कर सकते हैं।

उदाहरण के लिए: पाठ

@browser.div(:name => "content").span(:index => 1) 
#this is the first span element inside this div 

आप Xpath का उपयोग किए बिना, हालांकि कई अद्वितीय तत्वों आप बच्चे को स्पान तत्व तक पहुँचने से पहले करने की जरूरत है के माध्यम से काम कर सकते हैं। बेशक, आपको उस विशिष्ट बच्चे तत्व तक पहुंचने के लिए केवल एक अद्वितीय पैरेंट तत्व की आवश्यकता है, और आप उस से बच्चे को नीचे काम करते हैं।

div(:how => what).table(:how => what).td(:how => what).span(:how => what).text 

एक और उदाहरण है, यह मानते हुए वें पृष्ठ पर काल है: @ browser.span (: सूचकांक =>n)

द्वारा सूचकांक दृष्टिकोण बहुत भंगुर और संभावना है हालांकि पृष्ठ पर कोई भी अपडेट किए जाने पर तोड़ने के लिए।

+1

ध्यान दें कि यदि आप वॉटर के पुराने संस्करणों का उपयोग कर रहे हैं तो यह केवल पहला अवधि है जो वॉटर 2.x या वॉटर-वेबड्राइवर के साथ एक आधारित इंडेक्सिंग का उपयोग करता है जो शून्य आधारित इंडेक्सिंग (रूबी की तरह) का उपयोग करता है: index => 1' div –

9

यदि यह पाठ है:

browser.span(:text => /Text/) 
8

वहाँ मूलतः इस विशेष चुनौती से निपटने के लिए तीन तरीके हैं:

browser.span(:text => "Text") 

आप पाठ का ही हिस्सा जानते हैं कि आप रेगुलर एक्सप्रेशन का उपयोग कर सकते हैं। ज़ेल्जको ने पर आधारित जैसे ज्ञात पाठ के आधार पर पहले को संबोधित किया है। एडम सबसे आम तरीका पते, क्या संलग्न या तत्व मैं तीसरा रास्ता है, जो है को संबोधित करेंगे युक्त क्या है संलग्न द्वारा या तत्व बगल में।

यदि आपके पास एक ज्ञात तत्व है जो आपके अंदर है, तो आप इसके साथ शुरू कर सकते हैं और 'कंटेनर' तत्व प्राप्त करने के लिए .parent विधि का उपयोग कर सकते हैं। यह एक तालिका पंक्ति के रूप में एक सामान्य कंटेनर के माध्यम से आप चाहते हैं पाने के लिए .parent का उपयोग करके 'भाई' तत्व खोजने के लिए भी इस्तेमाल किया जा सकता है। पहला उपयोग काफी स्पष्ट है, लेकिन दूसरा टेबल के साथ काम करते समय शायद अधिक आम और बहुत उपयोगी है।

उदाहरण के लिए मान लें कि आपके पास डेटा की कई पंक्तियों वाली एक तालिका है जहां एक कॉलम अद्वितीय भाग संख्या है, और एक अन्य कॉलम में "कार्ट में जोड़ें" लिंक हैं।अब, आप अपने कार्ट में एक विशिष्ट भाग जोड़ना चाहते हैं, तो आप इस्तेमाल कर सकते हैं सूचकांक पाठ 'कार्ट में जोड़ें' के साथ संयुक्त यह यह है कि विशिष्ट पाठ के साथ 5 वीं लिंक किया जा रहा है के आधार पर की तरह कोड का उपयोग कर

browser.link(:text => 'add to cart', :index => 4).click 

लेकिन यह भंगुर है क्योंकि जैसे ही परिणाम बदलते हैं, (जो लाइव डेटा के साथ बहुत कुछ हो सकता है) आपका हिस्सा अब उस तालिका में 5 वां नहीं है, और आपका परीक्षण टूट जाएगा। आपको कुछ सत्यापन की आवश्यकता होगी जिसे आपने सही हिस्सा पाया है और उस पंक्ति पर कुछ और नहीं। हालांकि, watir में आप कुछ इस तरह कर सकते हैं:

browser.cell(:text => 'Part no. 123-45').parent.link(:text => 'add to cart').click 

एक मेज सेल के मामले में, सेल की मूल आम तौर पर एक तालिका पंक्ति हो जाएगा, और इस प्रकार सादे अंग्रेजी में इस 'सेल को खोजने के लिए अनुवाद इसमें 'भाग संख्या 123-45' के साथ, और उसके बाद उसी पंक्ति में 'कार्ट में जोड़ें' लिंक ढूंढें और क्लिक करें। (हालांकि मुझे लगता है कि आपने कोड को पढ़कर बाहर निकाला है।)

आप इसका उपयोग किसी भी 'भाई' या यहां तक ​​कि केवल 'पैरेंट' पाने के लिए कर सकते हैं जहां ऑब्जेक्ट के आगे या उसके भीतर कुछ अद्वितीय तत्व है आपको बातचीत करने की ज़रूरत है।

आप शायद एक्सपैथ के साथ ऐसा कुछ कर सकते हैं, लेकिन पांच हफ्ते बाद कोड पढ़ने के दौरान शुभकामनाएं इससे बाहर निकलती हैं। यह एक कारण है कि मैं वॉटर और वाटिर-वेबड्राइवर बनाम सेलेनियम को काफी पसंद करता हूं।

+2

के भीतर एक अवधि का दूसरा उदाहरण होगा, मैंने कभी भी एक साधारण समस्या के इतने सारे उत्तरों की कल्पना नहीं की थी। –

+3

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

+1

@ डेवएमकनुल्ला, क्या मेरे संशोधित उत्तर ने अन्य उत्तरों को थोड़ा और संदर्भ में रखा है? –

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