xpath axes dynamic xpath selenium webdriver
यह ट्यूटोरियल सेलेनियम वेबड्राइवर में डायनामिक XPath के लिए एक्सपीथ एक्ससेस का उपयोग विभिन्न एक्सपीथ एक्ससेस प्रयुक्त, उदाहरण और संरचना की व्याख्या के साथ करता है:
पिछले ट्यूटोरियल में, हमने XPath फ़ंक्शन और तत्व की पहचान करने में इसके महत्व के बारे में सीखा है। हालांकि, जब एक से अधिक तत्वों में बहुत समान अभिविन्यास और नामकरण होता है, तो तत्व को विशिष्ट रूप से पहचानना असंभव हो जाता है।
=> यहाँ सही सेलेनियम प्रशिक्षण गाइड की जाँच करें।
आप क्या सीखेंगे:
एक्सपीथ एक्सिस को समझना
एक उदाहरण की मदद से उपर्युक्त परिदृश्य को समझते हैं।
उस परिदृश्य के बारे में सोचें जहां 'संपादित करें' पाठ के साथ दो लिंक का उपयोग किया जाता है। ऐसे मामलों में, HTML की नोडल संरचना को समझना उचित हो जाता है।
कृपया नीचे दिए गए कोड को नोटपैड में कॉपी-पेस्ट करें और इसे .htm फ़ाइल के रूप में सहेजें।
Edit Edit
यूआई नीचे स्क्रीन की तरह दिखेगा:
समस्या का विवरण
क्यू # 1) क्या करना है जब भी XPath फ़ंक्शंस तत्व की पहचान करने में विफल रहते हैं?
उत्तर: ऐसे मामले में, हम XPath कार्य के साथ XPath एक्सिस का उपयोग करते हैं।
इस लेख का दूसरा भाग यह बताता है कि हम तत्व की पहचान करने के लिए पदानुक्रमित HTML प्रारूप का उपयोग कैसे कर सकते हैं। हम XPath Axes पर थोड़ी जानकारी प्राप्त करके शुरू करेंगे।
Q # 2) एक्सपीथ एक्सिस क्या हैं?
उत्तर: एक XPath अक्ष वर्तमान (संदर्भ) नोड के सापेक्ष नोड-सेट को परिभाषित करता है। इसका उपयोग उस पेड़ पर नोड के सापेक्ष नोड का पता लगाने के लिए किया जाता है।
Q # 3) एक प्रसंग नोड क्या है?
उत्तर: एक संदर्भ नोड को नोड के रूप में परिभाषित किया जा सकता है जो वर्तमान में XPath प्रोसेसर देख रहा है।
सेलेनियम परीक्षण में प्रयुक्त विभिन्न एक्सपीथ एक्सिस
तेरह अलग-अलग अक्ष हैं जो नीचे सूचीबद्ध हैं। हालांकि, हम सेलेनियम परीक्षण के दौरान उन सभी का उपयोग नहीं करने जा रहे हैं।
- पूर्वज : यह अक्ष संदर्भ नोड के सापेक्ष सभी पूर्वजों को इंगित करता है, रूट नोड तक भी पहुंच रहा है।
- पूर्वज-या-स्व: यह एक संदर्भ नोड और संदर्भ नोड के सापेक्ष सभी पूर्वजों को इंगित करता है, और रूट नोड भी शामिल है।
- विशेषता: यह संदर्भ नोड की विशेषताओं को इंगित करता है। इसे '@' प्रतीक के साथ दर्शाया जा सकता है।
- बच्चा: यह संदर्भ नोड के बच्चों को इंगित करता है।
- नीचे की ओर: यह संदर्भ नोड के बच्चों और पोते और उनके बच्चों (यदि कोई हो) को इंगित करता है। यह गुण और नाम स्थान का संकेत नहीं देता है।
- वंशज-या-स्व: यह संदर्भ नोड और बच्चों, और पोते और उनके बच्चों (यदि कोई हो) के संदर्भ नोड को इंगित करता है। यह विशेषता और नाम स्थान का संकेत नहीं देता है।
- निम्नलिखित: यह दिखाई देने वाले सभी नोड्स को इंगित करता है उपरांत HTML DOM संरचना में संदर्भ नोड। यह वंशज, विशेषता और नाम स्थान का संकेत नहीं देता है।
- निम्नलिखित-सहोदर: यह सब संकेत नोड्स (संदर्भ नोड के रूप में एक ही मूल) को इंगित करता है दिखाई HTML DOM संरचना में संदर्भ नोड के बाद। यह वंशज, विशेषता और नाम स्थान का संकेत नहीं देता है।
- नाम स्थान: यह संदर्भ नोड के सभी नामस्थान नोड्स को इंगित करता है।
- जनक: यह संदर्भ नोड के जनक को इंगित करता है।
- पूर्ववर्ती: यह दिखाई देने वाले सभी नोड्स को इंगित करता है इससे पहले HTML DOM संरचना में संदर्भ नोड। यह वंशज, विशेषता और नाम स्थान का संकेत नहीं देता है।
- पूर्व-सिबलिंग: यह एक दिखाई देने वाले सभी भाई-बहनों के नोड्स (संदर्भ के रूप में एक ही माता-पिता) को इंगित करता है इससे पहले HTML DOM संरचना में संदर्भ नोड। यह वंशज, विशेषता और नाम स्थान का संकेत नहीं देता है।
- स्व: यह एक संदर्भ नोड इंगित करता है।
एक्सपीथ एक्सिस की संरचना
XPath Axes कैसे काम करता है, इसे समझने के लिए नीचे दिए गए पदानुक्रम पर विचार करें।
उपरोक्त उदाहरण के लिए एक साधारण HTML कोड के नीचे देखें। कृपया नोटपैड संपादक में नीचे दिए गए कोड को कॉपी-पेस्ट करें और इसे .html फ़ाइल के रूप में सहेजें।
Animal
Vertebrate
Fish
Mammal
Herbivore
Carnivore
Lion
Tiger
Other
Invertebrate
Insect
Crustacean
पेज नीचे की तरह दिखेगा। हमारा मिशन तत्वों को विशिष्ट रूप से खोजने के लिए एक्सपीथ एक्सिस का उपयोग करना है। आइए उपरोक्त चार्ट में उन तत्वों की पहचान करने का प्रयास करें। संदर्भ नोड है 'सस्तन प्राणी'
(१) पूर्वज
डायरी: संदर्भ नोड से पूर्वज तत्व की पहचान करना।
कोर जावा साक्षात्कार सवालों के जवाब के साथ
XPath # 1: // div (@ class = 'Mammal') / पूर्वज :: div
XPath '// div (@ class = 'Mammal') / पूर्वज :: div' दो मिलान नोड्स फेंकता है:
- कशेरुक, जैसा कि यह 'स्तनपायी' का जनक है, इसलिए इसे पूर्वज भी माना जाता है।
- पशु इसे 'स्तनपायी' के माता-पिता के रूप में मानते हैं, इसलिए इसे पूर्वज माना जाता है।
अब, हमें केवल एक तत्व की पहचान करने की आवश्यकता है जो 'पशु' वर्ग है। हम नीचे बताए अनुसार XPath का उपयोग कर सकते हैं।
XPath#2: //div(@class='Mammal')/ancestor::div(@class='Animal')
यदि आप 'पशु' पाठ तक पहुँचना चाहते हैं, तो नीचे XPath का उपयोग किया जा सकता है।
# 2) पूर्वज-या-स्व
डायरी: संदर्भ नोड से संदर्भ नोड और पूर्वज तत्व की पहचान करने के लिए।
XPath # 1: // div (@ वर्ग = 'स्तनपायी') / पूर्वज-या-आत्म :: div
उपरोक्त XPath # 1 तीन मिलान नोड्स:
- पशु (पूर्वज)
- हड्डीवाला
- स्तनपायी (स्व)
# 3) बच्चा
डायरी: संदर्भ नोड 'स्तनपायी' के बच्चे की पहचान करने के लिए।
XPath # 1: // div (@ वर्ग = 'स्तनपायी') / बच्चा :: div
XPath # 1 संदर्भ नोड 'स्तनपायी' के सभी बच्चों की पहचान करने में मदद करता है। यदि आप विशिष्ट बाल तत्व प्राप्त करना चाहते हैं, तो कृपया XPath # 2 का उपयोग करें।
XPath # 2: // div (@ class = 'Mammal') / child :: div (@ class = 'Herbivore') / h5
# 4) वंशज
डायरी: संदर्भ नोड के बच्चों और पोते की पहचान करने के लिए (उदाहरण के लिए:) पशु ’)।
XPath # 1: // div (@ वर्ग = 'पशु') / वंशज :: div
जैसा कि पशु पदानुक्रम में शीर्ष सदस्य है, सभी बच्चे और वंशज तत्व उजागर हो रहे हैं। हम अपने संदर्भ के लिए संदर्भ नोड भी बदल सकते हैं और नोड के रूप में इच्छित किसी भी तत्व का उपयोग कर सकते हैं।
# 5) वंशज-या-स्व
डायरी: स्वयं तत्व और उसके वंश को खोजने के लिए।
XPath1: // div (@ वर्ग = 'पशु') / वंशज-या-स्व :: div
वंशज और वंशज-या-स्वयं के बीच एकमात्र अंतर यह है कि यह वंशज को उजागर करने के अलावा खुद को उजागर करता है।
# 6) का पालन करें
डायरी: संदर्भ नोड का पालन करने वाले सभी नोड्स को खोजने के लिए। यहाँ, प्रसंग नोड वह विभाज्य है जिसमें स्तनपायी तत्व होता है।
XPath: // div (@ class = 'Mammal') / निम्नलिखित :: div
निम्नलिखित-अक्षों में, सभी नोड्स जो संदर्भ नोड का पालन करते हैं, यह बच्चा या वंशज है, हाइलाइट किया जा रहा है।
# 7) अनुगामी-भाई
डायरी: संदर्भ नोड के बाद सभी नोड्स को खोजने के लिए जो समान माता-पिता को साझा करते हैं, और संदर्भ नोड के लिए एक भाई हैं।
XPath: // div (@ class = 'Mammal') / निम्नलिखित-भाई: div
निम्नलिखित और निम्न-भाई-बहन के बीच मुख्य अंतर यह है कि निम्नलिखित-भाई-बहन संदर्भ के बाद सभी सहोदर नोड्स लेते हैं, लेकिन समान माता-पिता को भी साझा करेंगे।
# 8) पूर्ववर्ती
डायरी: यह सभी नोड्स लेता है जो संदर्भ नोड से पहले आते हैं। यह माता-पिता या दादा-दादी का नोड हो सकता है।
यहाँ संदर्भ नोड अकशेरुकी है और उपरोक्त छवि में हाइलाइट की गई रेखाएँ सभी नोड्स हैं जो इनवर्टेब्रेट नोड से पहले आते हैं।
# 9) पूर्ववर्ती-भाई-बहन
डायरी: समान नोड को संदर्भ नोड के रूप में साझा करने वाले भाई को खोजने के लिए, और वह संदर्भ नोड से पहले आता है।
जैसा कि प्रसंग नोड अकशेरुकी है, केवल एक ही तत्व जिस पर प्रकाश डाला जा रहा है, वह है कशेरुक, क्योंकि ये दोनों भाई-बहन हैं और एक ही मूल 'पशु' साझा करते हैं।
# 10) जनक
डायरी: संदर्भ नोड के मूल तत्व को खोजने के लिए। यदि संदर्भ नोड स्वयं एक पूर्वज है, तो इसका कोई मूल नोड नहीं है और इसमें कोई मिलान नोड नहीं होगा।
प्रसंग नोड # 1: स्तनपायी
XPath: // div (@ class = 'Mammal') / माता-पिता :: div
जैसा कि संदर्भ नोड स्तनपायी है, कशेरुक के साथ तत्व को हाइलाइट किया जा रहा है क्योंकि यह स्तनपायी का जनक है।
प्रसंग नोड # 2: पशु
XPath: // div (@ वर्ग = 'पशु') / माता-पिता :: div
चूंकि पशु नोड स्वयं पूर्वज है, इसलिए यह किसी भी नोड को उजागर नहीं करता है, और इसलिए कोई मिलान नोड नहीं मिला।
# 11) स्व
डायरी: संदर्भ नोड को खोजने के लिए, स्वयं का उपयोग किया जाता है।
प्रसंग नोड: सस्तन प्राणी
XPath: // div (@ class = 'Mammal') / self :: div
जैसा कि हम ऊपर देख सकते हैं, स्तनपायी वस्तु की विशिष्ट पहचान की गई है। हम नीचे दिए गए XPath का उपयोग करके 'स्तनपायी' पाठ का चयन भी कर सकते हैं।
XPath: // div (@ class = 'Mammal') / self :: div / h4
पूर्ववर्ती और आसनों का उपयोग
मान लीजिए कि आप जानते हैं कि आपका लक्ष्य तत्व संदर्भ नोड से आगे या पीछे कितने टैग हैं, तो आप सीधे उस तत्व को उजागर कर सकते हैं और सभी तत्वों को नहीं।
उदाहरण: पूर्ववर्ती (सूचकांक के साथ)
मान लें कि हमारा संदर्भ नोड 'अन्य' है और हम 'स्तनपायी' तत्व तक पहुंचना चाहते हैं, हम ऐसा करने के लिए नीचे दिए गए दृष्टिकोण का उपयोग करेंगे।
पहला कदम: बस किसी भी सूचकांक मूल्य दिए बिना पूर्ववर्ती का उपयोग करें।
XPath: // div (@ class = 'Other') / पूर्ववर्ती :: div
यह हमें 6 मिलान नोड देता है, और हम केवल एक लक्षित नोड 'स्तनपायी' चाहते हैं।
दूसरा कदम: इंडेक्स वैल्यू (5) को div एलिमेंट (संदर्भ नोड से ऊपर की ओर गिनती करके) दें।
XPath: // div (@ वर्ग = 'अन्य') / पूर्ववर्ती :: div (5)
इस तरह, 'स्तनपायी' तत्व को सफलतापूर्वक पहचान लिया गया है।
उदाहरण: निम्नलिखित (सूचकांक के साथ)
मान लें कि हमारा संदर्भ नोड 'स्तनपायी' है और हम 'क्रस्टेशियन' तत्व तक पहुंचना चाहते हैं, हम ऐसा करने के लिए नीचे दिए गए दृष्टिकोण का उपयोग करेंगे।
पहला कदम: बस किसी भी इंडेक्स वैल्यू को दिए बिना निम्नलिखित का उपयोग करें।
XPath: // div (@ class = 'Mammal') / निम्नलिखित :: div
इससे हमें 4 मिलान नोड मिलते हैं, और हम केवल एक लक्षित नोड 'क्रस्टेशियन' चाहते हैं
दूसरा कदम: सूचकांक तत्व (4) को div तत्व (संदर्भ नोड से आगे गणना) दें।
XPath: // div (@ वर्ग = 'अन्य') / निम्नलिखित :: div (4)
इस तरह 'क्रस्टेशियन' तत्व को सफलतापूर्वक पहचान लिया गया है।
उपरोक्त परिदृश्य को फिर से बनाया जा सकता है पूर्ववर्ती- भाई-बहन तथा निम्नलिखित-भाई उपरोक्त दृष्टिकोण को लागू करके।
निष्कर्ष
ऑब्जेक्ट पहचान किसी भी वेबसाइट के स्वचालन में सबसे महत्वपूर्ण कदम है। यदि आप वस्तु को सही ढंग से सीखने के लिए कौशल प्राप्त कर सकते हैं, तो आपका 50% स्वचालन किया जाता है। जहां तत्व की पहचान करने के लिए लोकेटर उपलब्ध हैं, वहीं कुछ ऐसे उदाहरण भी हैं, जहां ऑब्जेक्ट की पहचान करने में भी लोकेटर विफल रहते हैं। ऐसे मामलों में, हमें विभिन्न तरीकों को लागू करना चाहिए।
यहां हमने तत्व को विशिष्ट रूप से पहचानने के लिए XPath फ़ंक्शंस और XPath Axes का उपयोग किया है।
हम इस लेख को याद करने के लिए कुछ बिंदुओं को बताकर समाप्त करते हैं:
- आपको संदर्भ के संदर्भ नोड पर 'पूर्वज' कुल्हाड़ियों को लागू नहीं करना चाहिए, स्वयं नोड पूर्वज है।
- आपको संदर्भ नोड के संदर्भ नोड पर 'मूल' कुल्हाड़ियों को लागू नहीं करना चाहिए, स्वयं नोड का पूर्वज है।
- आपको संदर्भ नोड के संदर्भ नोड पर 'बच्चे' कुल्हाड़ियों को लागू नहीं करना चाहिए, स्वयं वंशज है।
- आपको संदर्भ नोड के संदर्भ नोड पर 'वंशज' कुल्हाड़ियों को लागू नहीं करना चाहिए, यह स्वयं पूर्वज है।
- आपको HTML दस्तावेज़ संरचना में अंतिम नोड के संदर्भ नोड पर 'निम्नलिखित' कुल्हाड़ियों को लागू नहीं करना चाहिए।
- आपको संदर्भ दस्तावेज़ पर 'पूर्ववर्ती' कुल्हाड़ियों को लागू नहीं करना चाहिए यह HTML दस्तावेज़ संरचना में पहला नोड है।
हैप्पी लर्निंग !!!
=> विशेष सेलेनियम प्रशिक्षण ट्यूटोरियल श्रृंखला के लिए यहां जाएं।
अनुशंसित पाठ
- सेलेनियम में डायनेमिक XPath के लिए XPath फ़ंक्शंस
- ककड़ी सेलेनियम ट्यूटोरियल: ककड़ी जावा सेलेनियम वेबड्राइवर एकीकरण
- सेलेनियम लोकेटर: सेलेनियम (उदाहरण) में XPath का उपयोग कर वेब तत्वों को पहचानें
- सेलेनियम वेबड्राइवर का परिचय - सेलेनियम ट्यूटोरियल # 8
- क्रोमड्राइव सेलेनियम ट्यूटोरियल: क्रोम पर सेलेनियम वेबड्राइवर टेस्ट
- हमारी पहली वेबड्राइवर स्क्रिप्ट का कार्यान्वयन - सेलेनियम वेबड्राइवर ट्यूटोरियल # 10
- 30+ सर्वश्रेष्ठ सेलेनियम ट्यूटोरियल: वास्तविक उदाहरणों के साथ सेलेनियम सीखें
- सेलेनियम स्क्रिप्ट में वेब टेबल्स, फ्रेम्स, और डायनामिक एलिमेंट्स को हैंडल करना - सेलेनियम ट्यूटोरियल # 18