पेज को रिफ्रेश करें Selenium वेबड्राइवर
⚡ स्मार्ट सारांश
किसी पेज को रीफ़्रेश करने पर Selenium वेबड्राइवर वर्तमान को पुनः लोड करता है URL ताकि अभिकथन चलने से पहले प्रत्येक तत्व रेंडर हो जाए, और फ्रेमवर्क पांच अलग-अलग कमांड प्रदान करता है जो अलग-अलग तरीकों से समान रीलोड को प्राप्त करते हैं।

वेब-आधारित एप्लिकेशन के टेस्ट ऑटोमेशन के दौरान, सभी वेब तत्वों को पूरी तरह से लोड करने के लिए पेज को कई बार रीफ़्रेश करने की आवश्यकता होती है। पहले पेज लोड होने पर कुछ वेब तत्व लोड हो सकते हैं, जबकि सभी को दिखने में दूसरे पेज रीफ़्रेश की आवश्यकता होती है। यह काम दिए गए रीफ़्रेश कमांड का उपयोग करके किया जा सकता है। Selenium वेबड्राइवर.
पेज को रिफ्रेश कैसे करें? Selenium
ब्राउज़र रिफ्रेश ऑपरेशन निम्नलिखित तरीकों का उपयोग करके किया जा सकता है Seleniumहम पूरे लेख में नीचे दिए गए तरीकों पर विस्तार से चर्चा करेंगे।
- driver.navigate().refresh() कमांड
- विधि प्राप्त करें
- कुंजियाँ भेजें आदेश
- नेविगेट विधि
- driver.navigate().to() कमांड
1) driver.navigate().refresh() कमांड
यह पेज रिफ्रेश ऑपरेशन करने के लिए प्रदान की गई अंतर्निहित विधि है। Selenium वेबड्राइवर। यह कमांड टेस्ट ऑटोमेशन में पेज रिफ्रेश ऑपरेशन करने के लिए सबसे अधिक उपयोग की जाने वाली कमांड है। रिफ्रेश कमांड का उपयोग नीचे बताए गए सरल तरीके से किया जा सकता है।
driver.get("https://demo.guru99.com/selenium/guru99home/");
driver.navigate().refresh();
नेविगेशन एक इंटरफ़ेस है जिसका उपयोग ब्राउज़र के विभिन्न कार्यों जैसे पिछले पृष्ठ पर जाना, अगले पृष्ठ पर जाना, पृष्ठ रीफ़्रेश करना और ब्राउज़र बंद करना आदि के लिए किया जाता है। नेविगेशन इंटरफ़ेस के मेथड को driver.navigate() कमांड का उपयोग करके एक्सेस किया जा सकता है। नेविगेशन इंटरफ़ेस का रीफ़्रेश मेथड कोई आर्गुमेंट नहीं लेता और कोई वैल्यू रिटर्न नहीं करता।
उदाहरण:
परीक्षण परिदृश्य:
- वेब पेज के साथ क्रोम ब्राउज़र खोलें https://demo.guru99.com/selenium/guru99home/
- पेज सफलतापूर्वक लोड हो जाने के बाद, driver.navigate().refresh() मेथड का उपयोग करके वेब पेज को रिफ्रेश करें।
- driver.close() विधि का उपयोग करके ब्राउज़र बंद करें।
Code
package Guru99Demo; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class RefreshDemo { public static void main(String args[]) throws InterruptedException { System.setProperty("webdriver.chrome.driver", "D:\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get("https://demo.guru99.com/selenium/guru99home/"); driver.manage().window().maximize(); driver.navigate().refresh(); driver.close(); } }
⚠️ संस्करण नोट: Selenium प्रबंधक को साथ भेजा गया Selenium 4.6 और यह स्वचालित रूप से संबंधित ब्राउज़र ड्राइवर को डाउनलोड कर लेता है, इसलिए वर्तमान संस्करण में उपरोक्त System.setProperty पंक्ति की अब आवश्यकता नहीं है। new ChromeDriver() इतना ही काफी है। मूल पंक्ति को इसलिए रखा गया है क्योंकि वह अभी भी सही है। Selenium उदाहरण लिखने के लिए 3 प्रकार की शैली सेटअप का उपयोग किया गया था।
Code आउटपुट:
प्रारंभिक पृष्ठ लोड होने पर डेमो होम पेज नीचे दिखाए अनुसार प्रदर्शित होता है।
पेज रिफ्रेश होने के बाद पेज पर मौजूद वीडियो बदल गया है, जिससे यह पुष्टि होती है कि पेज वास्तव में रिलोड हो गया है।
पेज को रीफ़्रेश करने के कई अन्य तरीके
पेज को रीलोड करने का एकमात्र तरीका रिफ्रेश करना नहीं है। नीचे दी गई चार तकनीकें भी यही परिणाम देती हैं और इन्हें जानना उपयोगी है, क्योंकि कभी-कभी कोई लॉक-डाउन एप्लिकेशन या जिद्दी ब्राउज़र इनमें से किसी एक को ब्लॉक कर देता है।
2) गेट विधि
पेज को रिफ्रेश करने के लिए गेट मेथड का उपयोग रिकर्सिव तरीके से किया जा सकता है। ऐसा करने के लिए, हमें गेट मेथड में एक अन्य मेथड को आर्गुमेंट के रूप में पास करना होगा।
उदाहरण:
driver.get("https://www.guru99.com");
driver.get(driver.getCurrentUrl());
3) नेविगेट विधि
यह विधि ऊपर बताए गए रिकर्सन के समान ही अवधारणा का उपयोग करती है। getCurrentUrl() विधि को driver.navigate().to() विधि में एक तर्क के रूप में पास किया जाता है।
उदाहरण:
driver.get("https://www.guru99.com");
driver.navigate().to(driver.getCurrentUrl());
4) F5 कुंजी का उपयोग करके कुंजी भेजने की विधि
यह किसी पेज को रिफ्रेश करने के लिए दूसरी सबसे अधिक इस्तेमाल की जाने वाली विधि है Seleniumयह sendKeys विधि के लिए रिफ्रेश कुंजी (F5) को एक तर्क के रूप में लेता है। चूंकि sendKeys केवल वेब तत्वों पर काम करता है, न कि ब्राउज़र पर, इसलिए हमें पहले वेब पेज पर एक वैध वेब तत्व की पहचान करनी होगी और फिर sendKeys विधि का उपयोग करना होगा। इसे नीचे दिखाए गए तरीके से किया जा सकता है।
उदाहरण:
driver.get("https://www.guru99.com"); driver.findElement(By.id("username")).sendKeys(Keys.F5);
क्योंकि कीस्ट्रोक ब्राउज़र क्रोम के बजाय किसी एलिमेंट को डिलीवर किया जाता है, इसलिए यह रूट एलिमेंट पर फोकस होने पर निर्भर करता है। यदि सुनने का यंत्र यदि यह किसी ऐसे फ़ील्ड से मेल खाता है जो फ़ोकस नहीं ले सकता, तो कुंजी खो जाती है और पृष्ठ कभी पुनः लोड नहीं होता है।
5) ASCII का उपयोग करके कुंजी भेजने की विधि Code
यह विधि ऊपर बताए गए सिद्धांत का ही उपयोग करती है, लेकिन F5 कुंजी को आर्गुमेंट के रूप में पास करने के बजाय हम रिफ्रेश कुंजी के कोड पॉइंट को आर्गुमेंट के रूप में भेजते हैं। इसे नीचे दिखाए गए तरीके से किया जा सकता है।
driver.get("https://www.guru99.com"); driver.findElement(By.id("username")).sendKeys("\uE035");
मान \uE035 वेबड्राइवर यूनिकोड कोड पॉइंट है जिसे प्रोटोकॉल F5 पर मैप करता है, इसलिए यह स्निपेट और पिछला वाला समतुल्य हैं।
किसी पेज को रिफ्रेश करने का तरीका Javaस्क्रिप्ट निष्पादक
प्रत्येक ब्राउज़र पेज स्क्रिप्ट के लिए एक रीलोड फ़ंक्शन उपलब्ध कराता है, और Selenium इसे इसके माध्यम से कॉल किया जा सकता है Javascriptएक्जीक्यूटर इंटरफ़ेस। यह आमतौर पर तब इस्तेमाल किया जाता है जब वेबड्राइवर रिफ्रेश कमांड को एप्लिकेशन या ब्राउज़र एक्सटेंशन द्वारा बाधित कर दिया जाता है।
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("location.reload();");
दो भिन्नताओं को याद रखना महत्वपूर्ण है:
- स्थान.पुनः लोड करें() यह सामान्य रूप से पेज को रीलोड करता है और कैश से पेज उपलब्ध करा सकता है।
- इतिहास.गो(0) यह एक पुराना समकक्ष है जिसका उपयोग कुछ पुराने सॉफ्टवेयर सूट अभी भी करते हैं।
एक्ज़ीक्यूटर रूट पेज के अंदर चलता है, इसलिए यह अपने आप नए दस्तावेज़ का इंतज़ार नहीं करता। इसके बाद स्पष्ट प्रतीक्षा कमांड का प्रयोग करें, ठीक वैसे ही जैसे आप driver.navigate().refresh() के बाद करते हैं, और याद रखें कि स्क्रिप्ट-चालित रीलोड ब्राउज़र-स्तरीय डायलॉग को साफ़ नहीं करेगा। यदि परीक्षण के तहत एप्लिकेशन अपनी सामग्री को अतुल्यकालिक रूप से लोड करता है, तो वही सावधानी बरतनी चाहिए जो तब बरती जाती है जब AJAX कॉल को हैंडल करना Selenium वेबड्राइवर.
रिफ्रेश के बाद StaleElementReferenceException से कैसे बचें
पेज रिफ्रेश करने से मौजूदा DOM नष्ट हो जाता है और एक नया DOM बनता है। रिलोड से पहले कैप्चर किए गए सभी वेब एलिमेंट अब एक ऐसे नोड की ओर इंगित करते हैं जो अब मौजूद नहीं है, इसलिए उस पर अगली कॉल करने पर StaleElementReferenceException त्रुटि उत्पन्न होती है। पेज रिफ्रेश होने के बाद यह सबसे आम त्रुटि है।
तीन आदतें इन लगभग सभी असफलताओं को दूर कर देती हैं:
- बाद में खोजें, पहले कभी नहीं। वेबएलिमेंट के बजाय बाय लोकेटर को स्टोर करें, और रीलोड पूरा होने के बाद फाइंडएलिमेंट को फिर से कॉल करें।
- असली सिग्नल का इंतजार करें। किसी ऐसे तत्व की दृश्यता पर स्पष्ट प्रतीक्षा करना जो केवल रीलोड होने के बाद ही मौजूद होता है, एक निश्चित स्लीप की तुलना में कहीं अधिक विश्वसनीय है।
- पेज को रिफ्रेश करें, फिर दोबारा पढ़ें। रिलोड होने से पहले कैप्चर किए गए टेक्स्ट वैल्यू या एट्रीब्यूट को रिलोड होने के बाद किए गए असर्शन में कभी भी शामिल न करें।
नीचे दिया गया पैटर्न तीनों पर लागू होता है:
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10)); driver.navigate().refresh(); WebElement search = wait.until( ExpectedConditions.visibilityOfElementLocated(By.id("username"))); search.sendKeys("guru99");
WebDriverWait एक अवधि लेता है Selenium 4, जो कि पूर्णांक-सेकंड कंस्ट्रक्टर से एक बदलाव है जिसका उपयोग किया गया था Selenium 3. इन विफलताओं के लिए व्यापक तकनीकों को हमारी मार्गदर्शिका में शामिल किया गया है। अपवाद हैंडलिंग में Selenium.
की तुलना Selenium पेज रीफ़्रेश करने के तरीके
ये सभी छह कमांड पेज को रीलोड करते हैं, लेकिन वे इस बात में भिन्न हैं कि वे किस पर निर्भर करते हैं और वे कैसे विफल होते हैं।
| विधि | निर्भर करता है | पुनः लोड के माध्यम से | जब यह सही विकल्प हो |
|---|---|---|---|
| ड्राइवर.नेविगेट().रिफ्रेश() | कुछ भी अतिरिक्त नहीं | ब्राउज़र रीलोड कमांड | लगभग हमेशा — डिफ़ॉल्ट |
| ड्राइवर.गेट(ड्राइवर.गेटकरंटयूआरएल()) | एक पठनीय वर्तमान URL | एक नया नेविगेशन | जब आप इतिहास प्रविष्टि को भी हटाना चाहते हैं |
| ड्राइवर.नेविगेट().टू(ड्राइवर.गेटकरंटयूआरएल()) | एक पठनीय वर्तमान URL | एक नया नेविगेशन | ऊपर दिए गए विवरण के समान, नेविगेशन इंटरफ़ेस के माध्यम से लिखा गया। |
| sendKeys(Keys.F5) | एक केंद्रित करने योग्य तत्व | एक कुंजी-स्ट्रोक | जब आप जानबूझकर कीबोर्ड पथ का परीक्षण कर रहे हों |
| sendKeys(“\uE035”) | एक केंद्रित करने योग्य तत्व | एक कुंजी-स्ट्रोक | F5 के समान, कोड पॉइंट के रूप में लिखा गया |
| Javascriptएक्ज़ीक्यूटर लोकेशन.रीलोड() | स्क्रिप्टिंग सक्षम है | एक पेज स्क्रिप्ट | जब वेबड्राइवर कमांड अवरुद्ध हो जाता है |
रिफ्रेश कमांड से शुरुआत करें, और किसी दूसरी पंक्ति पर तभी जाएं जब वह किसी ऐसे कारण से विफल हो जाए जिसे आप समझते हों। यही प्राथमिकता क्रम तब भी लागू होता है जब आप ब्राउज़र विंडो को बड़ा करें या उसका आकार बदलें: नेटिव वेबड्राइवर कॉल को प्राथमिकता दें और स्क्रिप्ट रूट को फॉलबैक के रूप में मानें।


