स्पष्ट, स्पष्ट, और amp; सेलेनियम वेबड्राइवर में धाराप्रवाह प्रतीक्षा

विषय - सूची:

Anonim

सेलेनियम में, "वेट्स" परीक्षणों को निष्पादित करने में एक महत्वपूर्ण भूमिका निभाता है। इस ट्यूटोरियल में, आप सेलेनियम में "इंप्लिक्ट" और "एक्सप्लोसिव" दोनों के विभिन्न पहलुओं को जानेंगे।

इस ट्यूटोरियल में, आप सीखेंगे:

  • हम सेलेनियम में इंतजार क्यों करते हैं?
  • निहित प्रतीक्षा करें
  • स्पष्ट प्रतीक्षा करें
  • धाराप्रवाह प्रतीक्षा

हम सेलेनियम में इंतजार क्यों करते हैं?

अधिकांश वेब अनुप्रयोगों को अजाक्स और जावास्क्रिप्ट का उपयोग करके विकसित किया गया है। जब कोई पृष्ठ ब्राउज़र द्वारा लोड किया जाता है, तो जिन तत्वों के साथ हम बातचीत करना चाहते हैं वे अलग-अलग समय अंतराल पर लोड हो सकते हैं।

यह न केवल तत्व की पहचान करना कठिन बनाता है, बल्कि यदि तत्व स्थित नहीं है, तो यह " ElementNotVoubleException " अपवाद को फेंक देगा । सेलेनियम वेट्स का उपयोग करके, हम इस समस्या को हल कर सकते हैं।

आइए एक परिदृश्य पर विचार करें जहां हमें अपने परीक्षण में निहित और स्पष्ट दोनों प्रतीक्षा का उपयोग करना है। मान लें कि निहित प्रतीक्षा समय 20 सेकंड और स्पष्ट प्रतीक्षा समय 10 सेकंड पर सेट है।

मान लीजिए कि हम एक ऐसे तत्व को खोजने की कोशिश कर रहे हैं, जिसमें कुछ "ExpectedConditions " (स्पष्ट प्रतीक्षा) है, यदि तत्व Expl रुको (10 सेकंड) द्वारा परिभाषित समय सीमा के भीतर स्थित नहीं है, तो यह निहित प्रतीक्षा द्वारा परिभाषित समय सीमा का उपयोग करेगा (प्रतीक्षा करें) 20 सेकंड) " एलीमेंटनॉटविज़ेबसेप्शन " फेंकने से पहले ।

सेलेनियम वेब ड्राइवर इंतजार करता है

  1. निहित प्रतीक्षा करें
  2. स्पष्ट प्रतीक्षा करें

सेलेनियम में निहित प्रतीक्षा

सेलेनियम मेंइंप्लिकेट वेट का उपयोग वेब ड्राइवर को एक निश्चित समय के लिए प्रतीक्षा करने के लिए बताने के लिए किया जाता है, इससे पहले कि वह "नो लाइक एलिमेंट एक्सेप्शन" फेंकता है। डिफ़ॉल्ट सेटिंग 0. है। एक बार जब हम समय निर्धारित करते हैं, तो वेब ड्राइवर अपवाद को फेंकने से पहले उस समय के लिए तत्व की प्रतीक्षा करेगा।

सेलेनियम वेब ड्राइवर ने वाटिर से निहित प्रतीक्षा के विचार को उधार लिया है।

नीचे दिए गए उदाहरण में हमने 10 सेकंड के समय सीमा के साथ एक अंतर्निहित प्रतीक्षा की घोषणा की है। इसका मतलब यह है कि यदि तत्व उस समय सीमा के भीतर वेब पेज पर स्थित नहीं है, तो यह एक अपवाद फेंक देगा।

निहित प्रतीक्षा घोषित करने के लिए:

सिंटैक्स :

Driver.manage ()। टाइमआउट ()। अंतर्निहित 
पैकेज गुरु .est99;आयात java.util.concurrent.TimeUnit;आयात org.openqa.selenium.By;आयात org.openqa.selenium.WebDriver;आयात org.openqa.selenium.chrome.ChromeDriver;आयात org.testng.annotations.Test;सार्वजनिक वर्ग AppTest {संरक्षित WebDriver ड्राइवर;@परीक्षासार्वजनिक शून्य गुरु 99tutorials () इंटरप्टेड अपवाद को फेंकता है{{System.setProperty ("webdriver.chrome.driver", "। \\ chromedriver.exe");ड्राइवर = नया क्रोमड्राइवर ();ड्राइवर।स्ट्रिंग ईटल = "डेमो गुरु 99 पेज";स्ट्रिंग aTitle = "";// Chrome लॉन्च करें और उसे आधार URL पर पुनर्निर्देशित करेंDriver.get ("http://demo.guru99.com/test/guru99home/");// ब्राउज़र विंडो को अधिकतम करता हैdriver.manage ()। विंडो ()। मैक्सिमम ();// शीर्षक का वास्तविक मूल्य प्राप्त करेंaTitle = driver.getTitle ();// अपेक्षित शीर्षक के साथ वास्तविक शीर्षक की तुलना करेंयदि (aTitle.equals (eTitle)){{System.out.println ("टेस्ट पास");}अन्य {System.out.println ("परीक्षण विफल");}// बंद ब्राउज़रDriver.close ();}}

संहिता की व्याख्या

उपरोक्त उदाहरण में,

निम्नलिखित कोड पर विचार करें:

ड्राइवर।

इम्प्लांटेड प्रतीक्षा 2 मापदंडों को स्वीकार करेगी, पहला पैरामीटर समय को पूर्णांक मान के रूप में स्वीकार करेगा और दूसरा पैरामीटर SECONDS, MINUTES, MILISECOND, MICROSECONDS, NANOSONONDS, DAYS, HOURS, आदि के संदर्भ में समय मापन को स्वीकार करेगा।

सेलेनियम में स्पष्ट प्रतीक्षा करें

सेलेनियम में स्पष्ट प्रतीक्षा फेंक "ElementNotVisibleException" अपवाद से पहले से अधिक हो गई कुछ शर्तों (अपेक्षित शर्तें) या अधिक से अधिक समय के लिए प्रतीक्षा करने के लिए वेब ड्राइवर बताने के लिए प्रयोग किया जाता है। यह एक बुद्धिमान प्रकार की प्रतीक्षा है, लेकिन इसे केवल निर्दिष्ट तत्वों के लिए ही लागू किया जा सकता है। यह अंतर्निहित प्रतीक्षा से बेहतर विकल्प देता है क्योंकि यह गतिशील रूप से भरी हुई अजाक्स तत्वों की प्रतीक्षा करता है।

एक बार जब हम स्पष्ट प्रतीक्षा की घोषणा करते हैं, तो हमें " ExpectedConditions " का उपयोग करना होगा या हम यह पुष्टि कर सकते हैं कि हम कितनी बार Fluid Wait का उपयोग करके स्थिति की जांच करना चाहते हैं । इन दिनों लागू करते समय हम थ्रेड का उपयोग कर रहे हैं। सो () आमतौर पर इसका उपयोग करने की अनुशंसा नहीं की जाती है

नीचे दिए गए उदाहरण में, हम " WebDriverWait " वर्ग के लिए संदर्भ प्रतीक्षा बना रहे हैं और " WebDriver " संदर्भ का उपयोग कर त्वरित कर रहे हैं, और हम 20 सेकंड का अधिकतम समय सीमा दे रहे हैं।

वाक्य - विन्यास:

WebDriverWait प्रतीक्षा = नया WebDriverWait (WebDriverRefrence, TimeOut);
पैकेज गुरु .est99;आयात java.util.concurrent.TimeUnit;आयात org.openqa.selenium.By;आयात org.openqa.selenium.WebDriver;आयात org.openqa.selenium.WebElement;आयात org.openqa.selenium.chrome.ChromeDriver;आयात org.openqa.selenium.support.ui.ExpectedConditions;आयात org.openqa.selenium.support.ui.ebDriverWait;आयात org.testng.annotations.Test;सार्वजनिक वर्ग AppTest2 {संरक्षित WebDriver ड्राइवर;@परीक्षासार्वजनिक शून्य गुरु 99tutorials () इंटरप्टेड अपवाद को फेंकता है{{System.setProperty ("webdriver.chrome.driver", "। \\ chromedriver.exe");ड्राइवर = नया क्रोमड्राइवर ();WebDriverWait प्रतीक्षा = नया WebDriverWait (ड्राइवर, 20);स्ट्रिंग ईटल = "डेमो गुरु 99 पेज";स्ट्रिंग aTitle = "";// Chrome लॉन्च करें और उसे आधार URL पर पुनर्निर्देशित करेंDriver.get ("http://demo.guru99.com/test/guru99home/");// ब्राउज़र विंडो को अधिकतम करता हैdriver.manage ()। विंडो ()। मैक्सिमम ();// शीर्षक का वास्तविक मूल्य प्राप्त करेंaTitle = driver.getTitle ();// अपेक्षित शीर्षक के साथ वास्तविक शीर्षक की तुलना करेंअगर (aTitle.contentEquals (eTitle)){{System.out.println ("टेस्ट पास");}अन्य {System.out.println ("परीक्षण विफल");}WebElement Guru99seleniumlink;Guru99seleniumlink = Wait.until (ExpectedConditions.visibilityOfElementLocated (By.xpath ("/ html / body / div [1] / अनुभाग / div] [2] / div / div / 1 / div / div [1] / div / div / div / div / div [2] / div [2] / div / div / div / div / div [1] / div / div / a / i ")));Guru99seleniumlink.click ();}}

संहिता की व्याख्या

निम्नलिखित कोड पर विचार करें:

WebElement Guru99seleniumlink;Guru99seleniumlink = Wait.until (ExpectedConditions.visibilityOfElementLocated (By.xpath ("/ html / body / div [1] / अनुभाग / div] [2] / div / div / 1 / div / div [1] / div / div / div / div / div [2] / div [2] / div / div / div / div / div [1] / div / div / a / i ")));Guru99seleniumlink.click ();

इस WebDriver के प्रतीक्षा उदाहरण में, " WebDriverWait " वर्ग या " ExpectedConditions " जो भी पहले हो , निर्धारित समय की मात्रा के लिए प्रतीक्षा करें ।

उपरोक्त जावा कोड बताता है कि हम वेबपेज पर " WebDriverWait " वर्ग में 20 सेकंड के समय सीमा के लिए एक तत्व की प्रतीक्षा कर रहे हैं, जब तक कि " ExpectedConditions " नहीं मिलते हैं और स्थिति " दृश्यमानतापूर्ण " है।

सेलेनियम स्पष्ट प्रतीक्षा में उपयोग की जा सकने वाली अपेक्षित शर्तें निम्नलिखित हैं

  1. चेतावनी
  2. एलिमेंटेशन
  3. तत्व
  4. तत्व
  5. ढांचा
  6. अदृश्यता
  7. अदृश्यता
  8. मौजूदगी
  9. उपस्थिति
  10. textToBePresentInElement ()
  11. textToBePresentInElementLocated ()
  12. textToBePresentInElementValue ()
  13. शीर्षक
  14. शीर्षक शीर्षक ()
  15. दृश्यमान
  16. दृश्यता
  17. दृश्यता
  18. दृश्यता

सेलेनियम में धाराप्रवाह इंतजार

सेलेनियम में सुविज्ञ प्रतीक्षा के लिए वेब चालक आवृत्ति जिसके साथ हम एक "ElementNotVisibleException" अपवाद फेंकने से पहले की स्थिति की जांच करना चाहते हैं के रूप में, एक शर्त के लिए प्रतीक्षा करने के साथ-साथ अधिक से अधिक समय को परिभाषित करने के लिए किया जाता है। यह वेब एलीमेंट के लिए नियमित अंतराल पर जाँच करता है जब तक कि ऑब्जेक्ट नहीं मिलता है या टाइमआउट नहीं होता है।

आवृत्ति: समय के नियमित अंतराल पर स्थिति को सत्यापित / जांचने के लिए समय सीमा के साथ एक पुनरावृत्ति चक्र की स्थापना

आइए एक परिदृश्य पर विचार करें जहां एक तत्व समय के विभिन्न अंतराल पर लोड होता है। तत्व 10 सेकंड, 20 सेकंड या उससे भी अधिक के भीतर लोड हो सकता है, अगर हम 20 सेकंड का स्पष्ट इंतजार घोषित करते हैं। यह अपवाद फेंकने से पहले निर्दिष्ट समय तक इंतजार करेगा। ऐसे परिदृश्यों में, धाराप्रवाह प्रतीक्षा ही आदर्श प्रतीक्षा है क्योंकि यह तत्व को अलग-अलग आवृत्ति पर खोजने की कोशिश करेगा जब तक कि वह इसे ढूंढ नहीं लेता या अंतिम टाइमर नहीं निकल जाता।

वाक्य - विन्यास:

प्रतीक्षा रुको = नया फ्लुएंटवेट (वेबड्राइवर संदर्भ).withTimeout (टाइमआउट, SECONDS)। पॉलीपिंग (टाइमआउट, SECONDS).ignoring (Exception.class);

सेलेनियम v3.11 और इसके बाद के संस्करण के ऊपर कोड निकाला गया है। आपको उपयोग करने की आवश्यकता है

प्रतीक्षा रुको = नया फ्लुएंटवेट (वेबड्राइवर संदर्भ).withTimeout (Duration.ofSeconds (SECONDS)).pollingEvery (Duration.ofSeconds (SECONDS)).ignoring (Exception.class);
पैकेज गुरु .est99;आयात org.testng.annotations.Test;आयात java.util.NoSuchElementException;आयात java.util.concurrent.TimeUnit;आयात java.util.function.Function;आयात org.openqa.selenium.By;आयात org.openqa.selenium.WebDriver;आयात org.openqa.selenium.WebElement;आयात org.openqa.selenium.chrome.ChromeDriver;आयात org.openqa.selenium.support.ui.ExpectedConditions;आयात org.openqa.selenium.support.ui.luentWait;आयात org.openqa.selenium.support.ui.ait;आयात org.openqa.selenium.support.ui.ebDriverWait;आयात org.testng.annotations.Test;सार्वजनिक वर्ग AppTest3 {संरक्षित WebDriver ड्राइवर;@परीक्षासार्वजनिक शून्य गुरु 99tutorials () इंटरप्टेड अपवाद को फेंकता है{{System.setProperty ("webdriver.chrome.driver", "। \\ chromedriver.exe");स्ट्रिंग ईटल = "डेमो गुरु 99 पेज";स्ट्रिंग aTitle = "";ड्राइवर = नया क्रोमड्राइवर ();// Chrome लॉन्च करें और उसे आधार URL पर पुनर्निर्देशित करेंDriver.get ("http://demo.guru99.com/test/guru99home/");// ब्राउज़र विंडो को अधिकतम करता हैdriver.manage ()। विंडो ()। मैक्सिमम ();// शीर्षक का वास्तविक मूल्य प्राप्त करेंaTitle = driver.getTitle ();// अपेक्षित शीर्षक के साथ वास्तविक शीर्षक की तुलना करेंअगर (aTitle.contentEquals (eTitle)){{System.out.println ("टेस्ट पास");}अन्य {System.out.println ("परीक्षण विफल");}प्रतीक्षा करें.withTimeout (30, TimeUnit.SECONDS).pollingEvery (5, TimeUnit.SECONDS).ignoring (NoSuchElementException.class);WebElement क्लिकसेलेनियमलिंक = Wait.until (नया फ़ंक्शन  () {जनता से रिश्ता वेबडेस्क (वेबड्राइवर ड्राइवर) {वापसी चालक। ] / div [2] / div / div / div / div / div [1] / div / div / a / i));}};// सेलेनियम लिंक पर क्लिक करेंclickseleniumlink.click ();// बंद ~ ब्राउज़रDriver.close ();}}

संहिता की व्याख्या

निम्नलिखित कोड पर विचार करें:

प्रतीक्षा करें.withTimeout (30, TimeUnit.SECONDS).pollingEvery (5, TimeUnit.SECONDS).ignoring (NoSuchElementException.class);

उपरोक्त उदाहरण में, हम 30 सेकंड के समय के साथ एक धाराप्रवाह प्रतीक्षा की घोषणा कर रहे हैं और आवृत्ति " NoSuchElementException " को अनदेखा करके 5 सेकंड के लिए सेट है।

निम्नलिखित कोड पर विचार करें:

जनता से वेबएप्लिकेशन (वेबड्राइवर ड्राइवर) {वापसी चालक। ] / div [2] / div / div / div / div / div [1] / div / div / a / i)); 

हमने पृष्ठ पर वेब तत्व की पहचान करने के लिए एक नया फ़ंक्शन बनाया है। (Ex: यहां वेब एलीमेंट वेबपेज पर सेलेनियम लिंक के अलावा और कुछ नहीं है)।

फ्रीक्वेंसी को 5 सेकंड के लिए सेट किया जाता है और अधिकतम समय 30 सेकंड के लिए सेट किया जाता है। इस प्रकार इसका अर्थ है कि यह वेब पेज पर तत्व के लिए हर 5 सेकंड में अधिकतम 30 सेकंड के लिए जाँच करेगा। यदि तत्व इस समय सीमा के भीतर स्थित है, तो यह संचालन करेगा अन्यथा यह " ElementNotVoubleException " को फेंक देगा

इंप्लाटेट वेट बनाम एक्सप्लिक्ट वेट के बीच अंतर

निहित प्रतीक्षा करें स्पष्ट प्रतीक्षा करें
  • स्क्रिप्ट में सभी तत्वों पर लागू प्रतीक्षा समय लागू होता है
  • स्पष्ट प्रतीक्षा समय केवल उन तत्वों पर लागू होता है जो हमारे द्वारा लक्षित हैं
  • निहित प्रतीक्षा में, हमें स्थित होने वाले तत्व पर "ExpectedConditions" निर्दिष्ट करने की आवश्यकता नहीं है
  • स्पष्ट प्रतीक्षा में, हमें स्थित होने वाले तत्व पर "ExpectedConditions" निर्दिष्ट करने की आवश्यकता है
  • जब तत्व सेलेनियम निहित प्रतीक्षा में निर्दिष्ट समय सीमा के साथ स्थित होते हैं, तो इसका उपयोग करने की सिफारिश की जाती है
  • जब तत्वों को लोड होने में समय लग रहा है और तत्व की संपत्ति की पुष्टि करने के लिए भी उपयोग करने की सिफारिश की जाती है (जैसे दृश्यता।

निष्कर्ष:

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

इस लेख में चैतन्य पुजारी का योगदान है