AJAX कॉल को कैसे संभालें? Selenium वेबड्राइवर
अजाक्स क्या है?
AJAX का मतलब है अतुल्यकालिक Javaस्क्रिप्ट और XML, और यह वेब पेज को पूरे पेज को पुनः लोड किए बिना सर्वर से थोड़ी मात्रा में डेटा प्राप्त करने की अनुमति देता है।
Ajax एक तकनीक है जिसका उपयोग तेज़ और गतिशील वेब पेज बनाने के लिए किया जाता है। यह तकनीक अतुल्यकालिक है और इसके संयोजन का उपयोग करती है Javascript और XML। यह पूरे पेज को रीलोड किए बिना वेब पेज के कुछ हिस्सों को अपडेट कर देता है। AJAX तकनीक का उपयोग करने वाले कुछ प्रसिद्ध एप्लिकेशन इस प्रकार हैं: Gmailगूगल मैप्स, फेसबुक, यूट्यूब आदि।
अजाक्स कैसे काम करता है?
उदाहरण के लिए, जब आप सबमिट बटन पर क्लिक करते हैं, Javaलिपि सर्वर से अनुरोध करेगा, परिणाम की व्याख्या करेगा और वेबपेज को पुनः लोड किए बिना वर्तमान स्क्रीन को अपडेट करेगा।
- Ajax कॉल ब्राउज़र द्वारा शुरू किया गया एक एसिंक्रोनस अनुरोध है जो सीधे पेज ट्रांज़िशन में परिणामित नहीं होता है। इसका मतलब है, अगर आप Ajax अनुरोध फायर करते हैं, तो उपयोगकर्ता तब भी एप्लिकेशन पर काम कर सकता है जब अनुरोध प्रतिक्रिया की प्रतीक्षा कर रहा हो।
- AJAX क्लाइंट से सर्वर तक HTTP अनुरोध भेजता है और फिर पूरे पेज को फिर से लोड किए बिना सर्वर की प्रतिक्रिया को प्रोसेस करता है। इसलिए जब आप AJAX कॉल करते हैं, तो आप सर्वर द्वारा आपको प्रतिक्रिया भेजने में लगने वाले समय के बारे में निश्चित नहीं हैं.
परीक्षक के दृष्टिकोण से, यदि आप प्रदर्शित की जाने वाली सामग्री या तत्व की जाँच कर रहे हैं, तो आपको प्रतिक्रिया मिलने तक प्रतीक्षा करनी होगी। AJAX कॉल के दौरान डेटा XML प्रारूप में संग्रहीत किया जाता है और सर्वर से पुनर्प्राप्त किया जाता है।
Ajax कॉल को कैसे संभालें? Selenium वेबड्राइवर
RSI Ajax कॉल को संभालने में सबसे बड़ी चुनौती वेब पेज के लोडिंग समय को जानना है। चूंकि वेब पेज का लोड होना कुछ ही सेकंड तक चलेगा, इसलिए परीक्षक के लिए ऑटोमेशन टूल के माध्यम से ऐसे एप्लिकेशन का परीक्षण करना मुश्किल है। Selenium वेबड्राइवर को इस Ajax कॉल पर wait विधि का उपयोग करना होगा।
तो इस प्रतीक्षा आदेश को निष्पादित करके, सेलेनियम वर्तमान के निष्पादन को निलंबित कर देगा परीक्षण का मामला और अपेक्षित या नए मान की प्रतीक्षा करें। जब नया मान या फ़ील्ड दिखाई देता है, तो निलंबित परीक्षण मामले निष्पादित हो जाएँगे Selenium वेबड्राइवर.
निम्नलिखित प्रतीक्षा विधियाँ हैं Selenium वेबड्राइवर उपयोग कर सकता है
थ्रेड.स्लीप()
- थ्रेड.स्लीप () एक बुद्धिमानी भरा विकल्प नहीं है क्योंकि यह वर्तमान थ्रेड को निर्दिष्ट समय के लिए निलंबित कर देता है।
- AJAX में, आप कभी भी सटीक प्रतीक्षा समय के बारे में सुनिश्चित नहीं हो सकते। इसलिए, यदि तत्व प्रतीक्षा समय के भीतर दिखाई नहीं देगा तो आपका परीक्षण विफल हो जाएगा। इसके अलावा, यह ओवरहेड को बढ़ाता है क्योंकि थ्रेड.स्लीप (टी) को कॉल करने से वर्तमान थ्रेड को चल रही कतार से प्रतीक्षा कतार में ले जाया जाता है।
- समय 't' पर पहुंचने के बाद, वर्तमान थ्रेड प्रतीक्षा कतार से तैयार कतार में चला जाएगा, और फिर CPU द्वारा चुने जाने और चलने में कुछ समय लगेगा।
अंतर्निहित प्रतीक्षा()
- यह विधि वेबड्राइवर को प्रतीक्षा करने के लिए कहती है यदि तत्व तुरंत उपलब्ध नहीं है, लेकिन यह प्रतीक्षा ब्राउज़र के खुले रहने के पूरे समय के लिए लागू रहेगी। इसलिए पृष्ठ पर तत्वों की कोई भी खोज उस समय को ले सकती है जिसके लिए निहित प्रतीक्षा निर्धारित की गई है।
स्पष्ट प्रतीक्षा()
- स्पष्ट प्रतीक्षा इसका उपयोग परीक्षण निष्पादन को किसी विशेष शर्त के पूरा होने या अधिकतम समय व्यतीत होने तक रोकने के लिए किया जाता है।
वेबड्राइवरप्रतीक्षा करें
- इसका उपयोग किसी भी परिस्थिति में किया जा सकता है। इसे ExpectedCondition के साथ WebDriverWait के संयोजन से प्राप्त किया जा सकता है
- किसी तत्व के लिए गतिशील रूप से प्रतीक्षा करने का सबसे अच्छा तरीका यह है कि हर सेकंड शर्त की जांच की जाए और शर्त पूरी होते ही स्क्रिप्ट में अगले कमांड पर आगे बढ़ा जाए।
लेकिन इन सभी प्रतीक्षाओं के साथ समस्या यह है कि आपको टाइम आउट यूनिट का उल्लेख करना होगा। क्या होगा यदि तत्व अभी भी समय के भीतर मौजूद नहीं है? तो एक और प्रतीक्षा है जिसे फ़्लुएंट प्रतीक्षा कहा जाता है।
धाराप्रवाह प्रतीक्षा
- यह Wait इंटरफ़ेस का एक कार्यान्वयन है जिसमें टाइमआउट और पोलिंग अंतराल होता है। प्रत्येक FluentWait इंस्टेंस किसी शर्त के लिए प्रतीक्षा करने के लिए अधिकतम समय निर्धारित करता है, साथ ही शर्त की जाँच करने की आवृत्ति भी निर्धारित करता है।
Ajax कॉल इन को संभालने में चुनौतियाँ Selenium वेबड्राइवर
- Ajax कॉल को संभालने के लिए “pause” कमांड का उपयोग करना पूरी तरह से विश्वसनीय नहीं है। लंबा विराम समय परीक्षण को अस्वीकार्य रूप से धीमा कर देता है और परीक्षण की गति को बढ़ा देता है। परीक्षण समय। इसके बजाय, Ajax अनुप्रयोगों के परीक्षण में “waitforcondition” अधिक सहायक होगा।
- विशेष Ajax अनुप्रयोगों से जुड़े जोखिम का आकलन करना कठिन है
- डेवलपर्स को Ajax एप्लिकेशन को संशोधित करने की पूरी स्वतंत्रता देने से परीक्षण प्रक्रिया चुनौतीपूर्ण हो जाती है
- परीक्षण उपकरणों के लिए स्वचालित परीक्षण अनुरोध बनाना कठिन हो सकता है, क्योंकि AJAX अनुप्रयोग अक्सर POST डेटा प्रस्तुत करने के लिए भिन्न एन्कोडिंग या क्रमांकन तकनीक का उपयोग करते हैं।
Code Ajax हैंडलिंग का उदाहरण Selenium वेबड्राइवर
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();
}
}
सारांश
- AJAX वेब पेज को पूरे पेज को पुनः लोड किए बिना सर्वर से थोड़ी मात्रा में डेटा प्राप्त करने की अनुमति देता है।
- Ajax अनुप्रयोग का परीक्षण करने के लिए, विभिन्न प्रतीक्षा विधियों को लागू किया जाना चाहिए
- थ्रेडस्लीप
- निहित प्रतीक्षा
- स्पष्ट प्रतीक्षा
- वेबड्राइवरप्रतीक्षा करें
- धाराप्रवाह प्रतीक्षा
- परीक्षण उपकरणों के लिए स्वचालित परीक्षण अनुरोध बनाना कठिन हो सकता है, क्योंकि AJAX अनुप्रयोग अक्सर POST डेटा प्रस्तुत करने के लिए भिन्न एन्कोडिंग या क्रमांकन तकनीक का उपयोग करते हैं।

