AJAX कॉल को कैसे संभालें? Selenium वेबड्राइवर
⚡ स्मार्ट सारांश
AJAX कॉल पेज को रीलोड किए बिना उसके एक हिस्से को अपडेट करते हैं, इसलिए Selenium वेबड्राइवर को नई सामग्री की मौजूदगी मानकर न चलने के बजाय उसका इंतजार करना होगा, और प्रतीक्षा रणनीति ही यह तय करती है कि परीक्षण विश्वसनीय रूप से सफल होता है या नहीं।
AJAX क्या है?
AJAX का मतलब है एसिंक्रोनस Javaस्क्रिप्ट और XML का उपयोग करके, यह वेब पेज को पूरे पेज को रीलोड किए बिना सर्वर से थोड़ी मात्रा में डेटा प्राप्त करने की अनुमति देता है।
AJAX तेज़ और गतिशील वेब पेज बनाने की एक तकनीक है। यह अतुल्यकालिक है और इसमें कई विशेषताएं शामिल हैं। Javaलिपि यह डेटा फॉर्मेट का उपयोग करता है और पूरे पेज के बजाय पेज के कुछ हिस्सों को अपडेट करता है। Gmail, गूगल मैप्स, फेसबुक और YouTube सभी इसका इस्तेमाल करते हैं।
AJAX कैसे काम करता है?
उदाहरण के लिए, जब आप सबमिट बटन पर क्लिक करते हैं, Javaस्क्रिप्ट सर्वर को एक अनुरोध भेजती है, परिणाम की व्याख्या करती है और स्क्रीन को रीलोड किए बिना वर्तमान स्क्रीन को अपडेट करती है। नीचे दिया गया आरेख इस प्रक्रिया को दर्शाता है।
- AJAX कॉल ब्राउज़र से किया गया एक अतुल्यकालिक अनुरोध है जो पेज ट्रांज़िशन का कारण नहीं बनता है। अनुरोध के जवाब की प्रतीक्षा करते समय उपयोगकर्ता एप्लिकेशन पर काम करना जारी रख सकता है।
- AJAX सर्वर को HTTP अनुरोध भेजता है और पेज को रीलोड किए बिना प्रतिक्रिया को संसाधित करता है, इसलिए आप यह अनुमान नहीं लगा सकते कि सर्वर को जवाब देने में कितना समय लगेगा।
परीक्षक के दृष्टिकोण से, सामग्री या तत्व की जाँच करने का अर्थ है प्रतिक्रिया आने तक प्रतीक्षा करना। जैसा कि नाम से स्पष्ट है, पेलोड मूल रूप से XML था; अधिकांश API अब JSON लौटाते हैं।
AJAX कॉल को कैसे संभालें? Selenium वेबड्राइवर
AJAX कॉल को संभालने में सबसे बड़ी चुनौती लोडिंग समय का पता लगाना है। चूंकि अपडेट में एक सेकंड का कुछ अंश ही लगता है, इसलिए किसी ऑटोमेशन टूल के माध्यम से एप्लिकेशन का परीक्षण करना कठिन है। Selenium वेबड्राइवर को कॉल पर वेट मेथड लागू करना होगा।
उस प्रतीक्षा कमांड को निष्पादित करने से वर्तमान प्रक्रिया निलंबित हो जाती है। परीक्षण का मामला जब तक अपेक्षित या नया मान प्रकट न हो जाए; Selenium इसके बाद वेबड्राइवर रुके हुए चरणों को फिर से शुरू करता है।
निम्नलिखित प्रतीक्षा विधियाँ हैं Selenium वेबड्राइवर उपयोग कर सकता है
धागा.नींद()
- Thread.sleep() एक समझदारी भरा विकल्प नहीं है क्योंकि यह वर्तमान थ्रेड को निर्दिष्ट समय के लिए निलंबित कर देता है।
- AJAX में आप सटीक प्रतीक्षा समय के बारे में कभी भी निश्चित नहीं हो सकते, इसलिए यदि तत्व उस समय सीमा के भीतर दिखाई नहीं देता है तो परीक्षण विफल हो जाता है। इससे अतिरिक्त कार्य बोझ भी बढ़ जाता है, क्योंकि Thread.sleep(t) वर्तमान थ्रेड को चल रही कतार से प्रतीक्षा कतार में स्थानांतरित कर देता है।
- समय 't' के बाद थ्रेड रेडी क्यू में चला जाता है, और फिर सीपीयू द्वारा चुने जाने के लिए फिर से प्रतीक्षा करता है।
नोट: la Java विधि है धागा.नींद() छोटे अक्षरों में लिखें; बड़े अक्षरों वाला रूप संकलन में मान्य नहीं होगा।
अंतर्निहित प्रतीक्षा()
- यह विधि वेबड्राइवर को निर्देश देती है कि जब कोई एलिमेंट तुरंत उपलब्ध न हो तो प्रतीक्षा करे, और यह सेटिंग पूरे ब्राउज़र सेशन के दौरान लागू रहती है। इसलिए, प्रत्येक एलिमेंट की खोज में उतना समय लग सकता है जितना कि अंतर्निहित प्रतीक्षा की अनुमति देती है।
स्पष्ट प्रतीक्षा()
- स्पष्ट प्रतीक्षा इसका उपयोग परीक्षण निष्पादन को किसी विशेष शर्त के पूरा होने या अधिकतम समय व्यतीत होने तक रोकने के लिए किया जाता है।
वेबड्राइवरप्रतीक्षा करें
- इसे किसी भी स्थिति के लिए उपयोग किया जा सकता है, इसके लिए WebDriverWait को ExpectedCondition के साथ संयोजित करना होता है।
- सबसे अच्छा तरीका यह है कि हर सेकंड स्थिति की जांच की जाए और जैसे ही वह स्थिति पूरी हो जाए, अगले आदेश पर आगे बढ़ जाएं।
लेकिन इन सभी प्रतीक्षाओं के साथ समस्या यह है कि आपको टाइम आउट यूनिट का उल्लेख करना होगा। क्या होगा यदि तत्व अभी भी समय के भीतर मौजूद नहीं है? तो एक और प्रतीक्षा है जिसे फ़्लुएंट प्रतीक्षा कहा जाता है।
धाराप्रवाह प्रतीक्षा
- यह वेट इंटरफ़ेस का एक कार्यान्वयन है जिसमें इसका अपना टाइमआउट और पोलिंग अंतराल है। प्रत्येक फ़्लूएंटवेट इंस्टेंस किसी स्थिति के लिए प्रतीक्षा करने का अधिकतम समय और उसकी जाँच करने की आवृत्ति निर्धारित करता है।
AJAX कॉल को संभालने में चुनौतियाँ Selenium वेबड्राइवर
- “पॉज़” कमांड का उपयोग करना भरोसेमंद नहीं है। लंबे समय तक पॉज़ करने से टेस्ट बहुत धीमा हो जाता है और समय बढ़ जाता है। परीक्षण समय की कमी के कारण, AJAX अनुप्रयोगों के लिए "waitforcondition" की अनुशंसा की गई थी।
- विशिष्ट AJAX अनुप्रयोगों से जुड़े जोखिम का आकलन करना कठिन है।
- डेवलपर्स को AJAX एप्लिकेशन को संशोधित करने की पूरी स्वतंत्रता देने से परीक्षण प्रक्रिया चुनौतीपूर्ण हो जाती है।
- टेस्टिंग टूल्स के लिए ऑटोमेटेड टेस्ट रिक्वेस्ट बनाना मुश्किल हो सकता है, क्योंकि AJAX एप्लिकेशन अक्सर POST डेटा सबमिट करने के लिए अलग-अलग एन्कोडिंग या सीरियलाइज़ेशन तकनीक का उपयोग करते हैं।
नोट: “pause” और “waitforcondition” हैं सेलेनीज़ हटाए गए आदेश Selenium 3; वेबड्राइवर समकक्ष एक स्पष्ट प्रतीक्षा है।
Code AJAX हैंडलिंग का उदाहरण Selenium वेबड्राइवर
RSI TestNG नीचे दी गई क्लास टेक्स्ट को पढ़ती है, रेडियो बटन पर क्लिक करती है, AJAX प्रतिक्रिया की प्रतीक्षा करती है और पुष्टि करती है कि टेक्स्ट बदल गया है।
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; import org.testng.Assert; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; public class Ajaxdemo { private String URL = "https://demo.guru99.com/test/ajax.html"; WebDriver driver; WebDriverWait wait; @BeforeClass public void setUp() { System.setProperty("webdriver.chrome.driver",".\\chromedriver.exe"); //create chrome instance driver = new ChromeDriver(); driver.manage().window().maximize(); driver.navigate().to(URL); } @Test public void test_AjaxExample() { By container = By.cssSelector(".container"); wait = new WebDriverWait(driver, 5); wait.until(ExpectedConditions.presenceOfElementLocated(container)); //Get the text before performing an ajax call WebElement noTextElement = driver.findElement(By.className("radiobutton")); String textBefore = noTextElement.getText().trim(); //Click on the radio button driver.findElement(By.id("yes")).click(); //Click on Check Button driver.findElement(By.id("buttoncheck")).click(); /*Get the text after ajax call*/ WebElement TextElement = driver.findElement(By.className("radiobutton")); wait.until(ExpectedConditions.visibilityOf(TextElement)); String textAfter = TextElement.getText().trim(); /*Verify both texts before ajax call and after ajax call text.*/ Assert.assertNotEquals(textBefore, textAfter); System.out.println("Ajax Call Performed"); String expectedText = "Radio button is checked and it's value is Yes"; /*Verify expected text with text updated after ajax call*/ Assert.assertEquals(textAfter, expectedText); driver.close(); } }
नोट: on Selenium 4 पास सेकंड की अवधि (5) WebDriverWait का उपयोग करें और System.setProperty लाइन को हटा दें, क्योंकि Selenium मैनेजर ने क्रोमड्राइवर की समस्या का समाधान किया।

