तत्व की उपस्थिति सत्यापित करें और waitFor कमांड का उपयोग करें Selenium

⚡ स्मार्ट सारांश

तत्व की उपस्थिति सत्यापित करें और waitFor कमांड का उपयोग करें Selenium IDE यह पुष्टि करता है कि किसी पृष्ठ में परीक्षण के लिए अपेक्षित तत्व और पाठ मौजूद हैं, और अगले चरण के चलने से पहले गतिशील स्थिति के सत्य होने तक प्लेबैक को रोक देता है।

  • 🔘 तत्व जाँच: verifyElementPresent तब TRUE लौटाता है जब लोकेटर पृष्ठ पर किसी चीज़ से मेल खाता है, और verifyElementNotPresent इसका ठीक विपरीत है।
  • ️ टेक्स्ट चेक: verifyTextPresent पूरे पेज को खोजता है और केस-सेंसिटिव है, इसलिए "Atlanta" कभी भी "atlanta" से मेल नहीं खाता है।
  • ✅ पद की जाँच: verifyElementPositionLeft और verifyElementPositionTop किसी एलिमेंट के पेज के किनारे से पिक्सेल ऑफ़सेट की तुलना करते हैं।
  • 🧪 पेज लोड हो रहा है: clickAndWait जैसे andWait कमांड स्क्रिप्ट को तब तक रोकते हैं जब तक कि नया पेज पूरी तरह से लोड नहीं हो जाता।
  • ️ गतिशील सामग्री: waitFor कमांड पेज लोड होने के बजाय किसी शर्त की प्रतीक्षा करते हैं, जो उन AJAX स्क्रीन के लिए उपयुक्त है जो कभी रीलोड नहीं होती हैं।
  • 📊 वर्तमान आईडीई: ब्राउज़र एक्सटेंशन इन चरणों का नाम बदल देता है और प्रत्येक प्रतीक्षा कमांड को अपना-अपना मिलीसेकंड का टाइमआउट देता है।

तत्व की उपस्थिति सत्यापित करें और waitFor कमांड का उपयोग करें Selenium आईडीई

ए रिकॉर्ड किया गया Selenium आईडीई स्क्रिप्ट क्लिक और टाइप करती है, लेकिन यह अपने आप कभी तय नहीं करती कि एप्लिकेशन ने सही ढंग से काम किया या नहीं। दो कमांड समूह यह काम करते हैं: सत्यापित वे कमांड जो पेज की स्थिति की जांच करते हैं, और प्रतीक्षा वे कमांड, जो पेज की जांच के लिए तैयार होने तक निष्पादन को रोकते हैं।

⚠️ संस्करणों के बारे में एक नोट: नीचे दिए गए स्क्रीनशॉट मूल फ़ाइल से लिए गए हैं। Firefox-लगाना Selenium यह एक IDE है, जिसका वितरण अब बंद हो चुका है, और वे इसके कैमलकेस सेलेनीज़ नामों का उपयोग करते हैं। वर्तमान IDE क्रोम है। Firefox और एज ब्राउज़र एक्सटेंशनयहां वर्णित व्यवहार अभी भी लागू होता है, लेकिन कई कमांड के नाम बदल गए हैं - एक मानचित्रping तालिका इस लेख में बाद में दिखाई देगी, और प्रत्येक मूल कमांड और स्क्रीनशॉट को ठीक उसी रूप में संरक्षित किया गया है जैसा कि प्रकाशित हुआ था।

किसी तत्व की उपस्थिति सत्यापित करें

किसी तत्व की उपस्थिति सत्यापित करने के लिए हम निम्नलिखित दो कमांड का उपयोग कर सकते हैं:

  • सत्यापिततत्ववर्तमान - यदि निर्दिष्ट तत्व पृष्ठ में पाया गया तो सत्य लौटाता है; अन्यथा असत्य लौटाता है
  • सत्यापित करेंतत्वमौजूदनहींहै - यदि निर्दिष्ट तत्व पृष्ठ में कहीं भी नहीं मिला तो सत्य लौटाता है; यदि वह मौजूद है तो असत्य लौटाता है।

दोनों कमांड एक तत्व लेते हैं सुनने का यंत्र में Target फ़ील्ड — एक आईडी, एक नाम, एक सीएसएस चयनकर्ता, एक लिंक टेक्स्ट या एक एक्सपाथ अभिव्यक्ति — और दोनों को ही किसी मूल्य की आवश्यकता नहीं है।

नीचे दी गई परीक्षण स्क्रिप्ट सत्यापित करती है कि उपयोगकर्ता नाम टेक्स्ट बॉक्स मौजूद है Mercury टूर्स होमपेज पर फर्स्ट नेम टेक्स्ट बॉक्स नहीं है। फर्स्ट नेम टेक्स्ट बॉक्स दरअसल टूर्स के रजिस्ट्रेशन पेज में मौजूद एक तत्व है। Mercury भ्रमण, मुखपृष्ठ पर नहीं।

Selenium IDE स्क्रिप्ट उपयोगकर्ता नाम बॉक्स पर verifyElementPresent और प्रथम नाम बॉक्स पर verifyElementNotPresent का उपयोग करती है।

क्योंकि ये हैं सत्यापित आदेशों के बजाय जोर यदि कमांड विफल हो जाती है, तो लॉग में विफलता दर्ज की जाती है और शेष चरण चलते रहते हैं। इस अंतर को आगे विस्तार से समझाया गया है।

कमांड में एक निश्चित पाठ की उपस्थिति सत्यापित करें Selenium

किसी तत्व के अस्तित्व की जाँच करना हमेशा पर्याप्त नहीं होता — परीक्षण में अक्सर उपयोगकर्ता को दिखाए गए शब्दों की पुष्टि करना आवश्यक होता है। दो टेक्स्ट कमांड इस स्थिति को कवर करते हैं।

  • सत्यापित करेंटेक्स्टवर्तमान - यदि निर्दिष्ट पाठ स्ट्रिंग पृष्ठ में कहीं पाई गई है तो सत्य लौटाता है; अन्यथा गलत लौटाता है
  • सत्यापित करेंTextNotPresent - यदि निर्दिष्ट पाठ स्ट्रिंग पृष्ठ में कहीं भी नहीं मिली तो सत्य लौटाता है; यदि यह मिल गई तो असत्य लौटाता है

याद रखें कि ये आदेश केस-सेंसिटिव हैं।

नीचे दिए गए लॉग में दिखाया गया है कि एक ही पेज को दो बार चेक किया गया है और उसमें एक ही वाक्यांश की दो अलग-अलग स्पेलिंग हैं।

Selenium IDE लॉग से पता चलता है कि अटलांटा से लास वेगास के लिए verifyTextPresent पास हो रहा है, जबकि अटलांटा से लास वेगास के लिए यह विफल हो रहा है।

ऊपर दिए गए उदाहरण में, “Atlanta to Las Vegas” और “atlanta to Las Vegas” को अलग-अलग तरीके से देखा गया क्योंकि पहले वाक्य में “Atlanta” का अक्षर “A” अपरकेस में था जबकि दूसरे में लोअरकेस में। जब दोनों पर verifyTextPresent कमांड का प्रयोग किया गया, तो एक सफल रहा जबकि दूसरा असफल।

किसी तत्व की विशिष्ट स्थिति सत्यापित करें

लेआउट संबंधी दोष शायद ही कभी लोकेटर को बाधित करते हैं, इसलिए उपस्थिति जांच उन्हें पकड़ नहीं पाती हैं। स्थिति संबंधी आदेश इस कमी को पूरा करते हैं।

Selenium IDE किसी तत्व की स्थिति को मापकर (पिक्सल में) इंगित करता है कि वह ब्राउज़र विंडो के बाएं या ऊपरी किनारे से कितनी दूरी पर है।

  • सत्यापित करेंElementPositionLeft - सत्यापित करता है कि निर्दिष्ट पिक्सेल की संख्या पृष्ठ के बाएं किनारे से तत्व की दूरी से मेल खाती है या नहीं। यदि निर्दिष्ट मान बाएं किनारे से दूरी से मेल नहीं खाता है तो यह FALSE लौटाएगा।
  • सत्यापित करेंतत्वस्थितिशीर्ष - सत्यापित करता है कि निर्दिष्ट पिक्सेल की संख्या पृष्ठ के शीर्ष किनारे से तत्व की दूरी से मेल खाती है या नहीं। यदि निर्दिष्ट मान शीर्ष किनारे से दूरी से मेल नहीं खाता है, तो यह FALSE लौटाएगा।

नीचे दी गई स्क्रिप्ट वैल्यू कॉलम में अपेक्षित पिक्सेल ऑफसेट को रिकॉर्ड करती है।

Selenium IDE में verifyElementPositionLeft और verifyElementPositionTop फ़ंक्शन का उपयोग करके पिक्सेल मानों के साथ Value कॉलम में चरण निर्धारित किए जाते हैं।

इन दोनों कमांडों का सावधानीपूर्वक उपयोग करें। पिक्सेल ऑफ़सेट विंडो के आकार, ज़ूम स्तर और इंस्टॉल किए गए फ़ॉन्ट के साथ बदलता रहता है, इसलिए एक मशीन पर सही काम करने वाला हार्ड-कोडेड नंबर दूसरी मशीन पर गलत हो सकता है।

प्रतीक्षा आदेश Selenium

एक वेरीफाई कमांड केवल स्क्रीन पर पहले से मौजूद चीज़ों की जांच कर सकता है, इसलिए समय से पहले चलने वाली जांच विफल हो जाती है, भले ही एप्लिकेशन काम कर रहा हो। वेट कमांड इस समय संबंधी समस्या का समाधान करते हैं।

प्रतीक्षा आदेशों के प्रकार निम्नलिखित हैं Selenium

औरप्रतीक्षा आदेश

ये ऐसे कमांड हैं जो अगले कमांड पर जाने से पहले नए पेज के लोड होने की प्रतीक्षा करेंगे।

उदाहरण हैं

  • क्लिक करेंऔरप्रतीक्षा करें
  • प्रकारऔरप्रतीक्षा करें
  • चयन करेंऔरप्रतीक्षा करें

इनमें से प्रत्येक एक साधारण क्रिया कमांड है जिसमें एंडवेट प्रत्यय जुड़ा हुआ है, जैसा कि नीचे दिए गए रिकॉर्ड किए गए चरण में दिखाया गया है।

रिकॉर्ड किए गए क्लिकएंडवेट चरण को पकड़े हुए Selenium अगली पेज लोड होने तक IDE स्क्रिप्ट चलती रहेगी

waitFor आदेश

ये ऐसे कमांड हैं जो अगले कमांड पर आगे बढ़ने से पहले निर्दिष्ट शर्त के सत्य होने की प्रतीक्षा करते हैं (नए पेज के लोड होने की परवाह किए बिना)। ये कमांड AJAX-आधारित डायनेमिक वेबसाइट पर उपयोग करने के लिए अधिक उपयुक्त हैं जो पूरे पेज को फिर से लोड किए बिना मान और तत्व बदलते हैं। उदाहरणों में शामिल हैं:

  • शीर्षक के लिए प्रतीक्षा करें
  • waitForTextPresent
  • waitForAlert

नीचे दिए गए फेसबुक परिदृश्य पर विचार करें।

फेसबुक साइन-अप फॉर्म में यह सवाल दिख रहा है कि लिंक पर क्लिक करने से पहले मुझे अपनी जन्मतिथि क्यों देनी होगी?

हम “आपका जन्मदिन प्रदान करना” पाठ की उपस्थिति को सत्यापित करने के लिए “click” और “waitForTextPresent” के संयोजन का उपयोग कर सकते हैं।

Selenium IDE चरणों में, अपनी जन्मतिथि का पाठ प्रदान करने के लिए waitForTextPresent के साथ क्लिक को संयोजित करना शामिल है।

हम clickAndWait का उपयोग नहीं कर सकते क्योंकि “मुझे अपना जन्मदिन क्यों बताना है?” लिंक पर क्लिक करने पर कोई पेज लोड नहीं हुआ। अगर हम ऐसा करते हैं, तो परीक्षण विफल हो जाएगा

स्क्रिप्ट द्वारा डाली गई किसी भी सामग्री पर यही नियम लागू होता है, न कि नेविगेशन द्वारा, इसीलिए AJAX-संचालित स्क्रीन लगभग हमेशा andWait की बजाय waitFor की आवश्यकता होती है।

Assert, Verify और waitFor कमांड्स में Selenium आईडीई

शुरुआती लोग अक्सर गलत फैमिली चुन लेते हैं और फिर सोचते हैं कि कोई सूट पहले ही डिफेक्ट पर क्यों रुक जाता है, या फिर वह बीस ऐसी विफलताएँ क्यों दिखाता है जो सभी tracवापस एक पर आते हैं। तीनों उपसर्ग तीन अलग-अलग प्रश्नों के उत्तर देते हैं।

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

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

वर्तमान में सत्यापन और प्रतीक्षा कमांड Selenium आईडीई

RSI Firefoxऊपर दिए गए स्क्रीनशॉट बनाने वाले प्लगइन IDE को बंद कर दिया गया था, और वर्तमान ब्राउज़र एक्सटेंशन के लिए कमांड सेट को फिर से बनाया गया था। कई सेलेनीज़ नाम बचे रहे, कुछ के नाम बदल दिए गए, और कुछ को हटा दिया गया। नीचे दी गई तालिका इस लेख में उपयोग किए गए कमांड को उनके वर्तमान समकक्षों से दर्शाती है, जो आधिकारिक स्रोत से लिए गए हैं। Selenium IDE कमांड संदर्भ.

विरासत सेलेनीज़ कमान वर्तमान IDE में कमांड
सत्यापिततत्ववर्तमान तत्व की उपस्थिति सत्यापित करें
सत्यापित करेंतत्वमौजूदनहींहै सत्यापित तत्व मौजूद नहीं है
सत्यापित करेंटेक्स्टवर्तमान टेक्स्ट को सत्यापित करें (यह सत्यापन किसी एलिमेंट लोकेटर तक सीमित है, पूरे पेज तक नहीं)।
सत्यापित करेंTextNotPresent टेक्स्ट को सत्यापित न करें (किसी तत्व लोकेटर तक सीमित)
शीर्षक सत्यापित करें शीर्षक सत्यापित करें
verifyElementPositionLeft / verifyElementPositionTop कोई समकक्ष नहीं — स्थिति संबंधी अभिकथन हटा दिए गए
क्लिकएंडवेट, टाइपएंडवेट, सेलेक्टएंडवेट एंडवेट प्रत्यय का उपयोग नहीं किया गया है — ओपन कमांड पहले से ही पेज लोड होने का इंतजार करता है।
waitForElementPresent एलिमेंट के मौजूद होने की प्रतीक्षा करें, प्रतीक्षा समय मिलीसेकंड में होगा।
waitForAlert डायलॉग बॉक्स दिखाई देने के बाद अलर्ट की पुष्टि करें या अलर्ट टेक्स्ट को सत्यापित करें।

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

Verify और waitFor कमांड के साथ होने वाली सामान्य त्रुटियाँ

इन कमांडों से जुड़ी अधिकतर समस्याएं IDE की खराबी नहीं होतीं। नीचे दी गई सूची में सबसे आम विफलताओं और उनके समाधान दिए गए हैं।

  • तत्व मौजूद है लेकिन फिर भी जांच विफल हो जाती है। उपस्थिति और दृश्यता अलग-अलग अवस्थाएँ हैं। CSS नियम के पीछे छिपा हुआ तत्व अभी भी DOM में मौजूद होता है, इसलिए जब परीक्षण उपयोगकर्ता द्वारा वास्तव में उसे देखे जाने पर निर्भर करता है, तो उपस्थिति जाँच के साथ तत्व के दिखाई देने की प्रतीक्षा करें।
  • एक जैसे दिखने वाले शब्दों पर टेक्स्ट चेक विफल हो जाता है। डिजाइन दस्तावेज़ से कॉपी किए गए नॉन-ब्रेकिंग स्पेस, ट्रेलिंग व्हाइटस्पेस और कर्ली एपोस्ट्रोफी, ये सभी सटीक मिलान को बाधित करते हैं। कृपया अपेक्षित स्ट्रिंग को पेस्ट करने के बजाय हाथ से दोबारा टाइप करें।
  • एक प्रतीक्षा कमांड उस पृष्ठ पर समय समाप्त हो जाता है जो स्पष्ट रूप से लोड हो चुका था। यह एलिमेंट आमतौर पर एक iframe के अंदर होता है। पहले 'select frame' कमांड चलाएँ, अन्यथा लोकेटर का मूल्यांकन गलत दस्तावेज़ के विरुद्ध किया जाएगा।
  • सिंगल-पेज एप्लिकेशन पर क्लिकएंडवेट अटक जाता है। कोई नेविगेशन नहीं होता, इसलिए प्रतीक्षा करने की कोई आवश्यकता नहीं है। इसे क्लिक और उपयुक्त waitFor कमांड से बदलें।
  • पोजीशन चेक स्थानीय स्तर पर सफल होता है लेकिन बिल्ड सर्वर पर असफल हो जाता है। स्क्रीन का आकार और फ़ॉन्ट का प्रदर्शन भिन्न हो सकता है। उपस्थिति या टेक्स्ट की जाँच को प्राथमिकता दें, या परीक्षण की शुरुआत में ही विंडो का आकार स्पष्ट रूप से निर्धारित करें।
  • पूरी प्रक्रिया पहले बेमेल पर ही रुक जाती है। जहां verify कमांड का प्रयोग होना चाहिए था, वहां assert कमांड रिकॉर्ड हो गया। प्रीफ़िक्स बदलें और रन केवल पहली विफलता के बजाय सभी विफलताओं की रिपोर्ट करेगा।

एक बार जब स्क्रिप्ट इन बाधाओं से बच जाती है, तो अगला कदम आमतौर पर यह होता है कि... रनटाइम मानों को वेरिएबल्स में स्टोर करें इसलिए जांच वास्तविक डेटा से की जाती है, न कि हार्ड-कोडेड स्ट्रिंग्स से।

अक्सर पूछे जाने वाले प्रश्न

पुराने IDE में प्रत्येक waitFor चरण के लिए एक ही वैश्विक टाइमआउट का उपयोग होता था, जिसे setTimeout कमांड से बदला जा सकता था। वर्तमान एक्सटेंशन प्रत्येक wait कमांड पर मिलीसेकंड में एक स्पष्ट प्रतीक्षा समय लेता है, इसलिए एक धीमी स्क्रीन के कारण अब अन्य सभी चरणों को उतनी ही देर तक प्रतीक्षा करने की आवश्यकता नहीं होती है।

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

ऐसा नहीं है। उपस्थिति का अर्थ है कि नोड DOM में मौजूद है, जो CSS द्वारा छिपे हुए या स्क्रीन से बाहर स्थित तत्वों के लिए भी सत्य रहता है। जब परीक्षण उपयोगकर्ता द्वारा किसी चीज़ को देखने पर निर्भर करता है, तो उपस्थिति जांच के साथ-साथ तत्व के दृश्यमान होने की प्रतीक्षा भी जोड़ें।

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

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

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

यह यांत्रिक भाग को अच्छी तरह से संभालता है - एक प्रतीक्षा चरण को अपेक्षित स्थिति के साथ वेबड्राइवरवेट में बदल देता है। Revइसके द्वारा चुने गए टाइमआउट और शर्त पर ध्यान दें, क्योंकि उत्पन्न उपस्थिति शर्त को अक्सर दृश्यता शर्त के रूप में होना चाहिए।

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

इस पोस्ट को संक्षेप में इस प्रकार लिखें: