उदाहरण के साथ सेलेनियम वेबड्राइवर में जावास्क्रिप्ट

विषय - सूची:

Anonim

JavaScriptExecutor क्या है?

JavaScriptExecutor एक इंटरफ़ेस है जो सेलेनियम वेबड्राइवर के माध्यम से जावास्क्रिप्ट को निष्पादित करने में मदद करता है। JavaScriptExecutor चयनित विंडो या वर्तमान पृष्ठ पर जावास्क्रिप्ट को चलाने के लिए दो तरीके "एग्ज़िक्यूटस्क्रिप्ट" और "एग्ज़ामेस्पिनस्क्रिप्ट" प्रदान करता है।

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

  • JavaScriptExecutor क्या है?
  • हमें JavaScriptExecutor की आवश्यकता क्यों है?
  • JavaScriptExecutor मेथड्स
  • निष्पादनों का उदाहरण
    • उदाहरण 1: परीक्षण के तहत ब्राउज़र में नींद का प्रदर्शन करना।
  • एक्जीक्यूटस्क्रिप्ट का उदाहरण
    • 1) उदाहरण: अलर्ट विंडो को लॉगिन और जेनरेट करने के लिए एक बटन पर क्लिक करें
    • 2) उदाहरण: स्क्रैप डेटा कैप्चर करें और विभिन्न पृष्ठों पर नेविगेट करें
    • 3) उदाहरण: स्क्रॉल डाउनिंग

हमें JavaScriptExecutor की आवश्यकता क्यों है?

सेलेनियम वेबड्राइवर में, XPath, CSS आदि जैसे लोकेटरों का उपयोग वेब पेज पर संचालन को पहचानने और प्रदर्शन करने के लिए किया जाता है।

यदि ये निवासी काम नहीं करते हैं, तो आप JavaScriptExecutor का उपयोग कर सकते हैं। आप वेब तत्व पर वांछित ऑपरेशन करने के लिए JavaScriptExecutor का उपयोग कर सकते हैं।

सेलेनियम javaScriptExecutor का समर्थन करता है। अतिरिक्त प्लगइन या ऐड-ऑन की कोई आवश्यकता नहीं है। आपको जावास्क्रिप्ट स्क्रिप्ट का उपयोग करने के लिए स्क्रिप्ट में आयात ( org.openqa.selenium.JavascriptExecutor ) करना होगा।

JavaScriptExecutor मेथड्स

  1. निष्पादित करें

अतुल्यकालिक स्क्रिप्ट के साथ, आपका पृष्ठ अधिक तेज़ी से प्रस्तुत होता है। पेज रेंडर करने से पहले उपयोगकर्ताओं को एक स्क्रिप्ट का इंतजार करने के लिए मजबूर करने के बजाय। यह फ़ंक्शन सेलीनियम में वर्तमान में चयनित फ्रेम या विंडो के संदर्भ में जावास्क्रिप्ट के एक अतुल्यकालिक टुकड़े को निष्पादित करेगा। जिस JS को निष्पादित किया गया है, वह विभिन्न कॉलबैक फ़ंक्शन के साथ सिंगल-थ्रेडेड है जो सिंक्रोनस रन करता है।

  1. निष्पादित करें

यह विधि वर्तमान में सेलेनियम में चयनित फ्रेम या खिड़की के संदर्भ में जावास्क्रिप्ट निष्पादित करती है। इस पद्धति में प्रयुक्त स्क्रिप्ट एक अनाम फ़ंक्शन (नाम के बिना एक फ़ंक्शन) के शरीर में चलती है। हम इसके लिए जटिल तर्क भी पारित कर सकते हैं।

स्क्रिप्ट मानों को वापस कर सकती है। डेटा प्रकार लौटे हैं

  • बूलियन
  • लंबा
  • तार
  • सूची
  • WebElement।

JavascriptExecutor के लिए मूल सिंटैक्स नीचे दिया गया है:

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

JavascriptExecutor js = (JavascriptExecutor) ड्राइवर;js.executeScript (स्क्रिप्ट, तर्क);
  • स्क्रिप्ट - यह जावास्क्रिप्ट है जिसे निष्पादित करने की आवश्यकता है।
  • तर्क - यह स्क्रिप्ट का तर्क है। यह वैकल्पिक है।

निष्पादनों का उदाहरण

निष्पादनों का उपयोग करना, आपके परीक्षण के प्रदर्शन को बेहतर बनाने में मदद करता है। यह एक सामान्य कोडिंग की तरह अधिक लेखन परीक्षण की अनुमति देता है।

सेन्सेनियम ब्राउज़र द्वारा निष्पादित की जा रही आगे की कार्रवाइयों को निष्पादित करता है, लेकिन क्रियान्वयन कार्रवाई को ब्लॉक नहीं करता है। स्क्रिप्ट हो जाने के बाद यह सर्वर-साइड टेस्टिंग सूट में कॉलबैक भेजेगा। इसका अर्थ है कि स्क्रिप्ट के अंदर सब कुछ ब्राउज़र द्वारा निष्पादित किया जाएगा न कि सर्वर द्वारा।

उदाहरण 1: परीक्षण के तहत ब्राउज़र में नींद का प्रदर्शन करना।

इस परिदृश्य में, हम निष्पादित करने के लिए "गुरु99" डेमो साइट का उपयोग करेंगे। इस उदाहरण में, आप करेंगे

  • ब्राउज़र लॉन्च करें।
  • ओपन साइट "http://demo.guru99.com/V4/"।
  • आवेदन आगे की कार्रवाई करने के लिए 5 सेकंड तक इंतजार करता है।

चरण 1) निष्पादित करने से पहले 5 सेकंड (5000 मिलीसेकंड) के लिए प्रतीक्षा करने से पहले समय पर कब्जा करें।

चरण 2) फिर, 5 सेकंड प्रतीक्षा करने के लिए निष्पादित करें।

चरण 3) फिर, वर्तमान समय प्राप्त करें।

चरण 4) घटाना (वर्तमान समय - प्रारंभ समय) = गुजरा हुआ समय।

चरण 5) आउटपुट को सत्यापित करें कि उसे 5000 मिलीसेकंड से अधिक प्रदर्शित होना चाहिए

आयात java.util.concurrent.TimeUnit;आयात org.openqa.selenium.JavascriptExecutor;आयात org.openqa.selenium.WebDriver;आयात org.openqa.selenium.firefox.FirefoxDriver;आयात org.testng.annotations.Test;पब्लिक क्लास JavaSE_Test {@परीक्षासार्वजनिक शून्य लॉगिन (){{WebDriver ड्राइवर = नया FirefoxDriver ();// टाइप कास्टिंग के द्वारा JavascriptExecutor इंटरफ़ेस ऑब्जेक्ट बनानाJavascriptExecutor js = (JavascriptExecutor) ड्राइवर;// साइट को लॉन्च करना।Driver.get ("http://demo.guru99.com/V4/");// अधिकतम विंडोDriver.manage ()। window ()। मैक्सिमम ();// स्क्रिप्ट टाइमआउट को 20 सेकंड तक सेट करेंDriver.manage ()। टाइमआउट ()। सेटस्क्रिप्ट टाइमआउट (20, TimeUnit.SECONDS);// घोषणा करें और प्रारंभ समय निर्धारित करेंlong start_time = System.currentTimeMillis ();// कॉल 5 मिनट के लिए प्रतीक्षा करने के लिए निष्पादित करेंjs.executeAsyncScript ("window.setTimeout (तर्क [तर्क.प्रदर्शन - 1], 5000));");// समय का अंतर (वर्तमान समय - प्रारंभ समय) प्राप्त करें।System.out.println ("बीत चुका समय: + (System.currentTimeMillis () - start_time));}}

आउटपुट: नीचे दिखाए गए समय को सफलतापूर्वक 5 सेकंड (5000 मील प्रति सेकंड) से अधिक दिखाया गया है:

[TestNG] रनिंग:C: \ Users \ gauravn \ AppData \ Local \ Temp \ testng-eclipse-387352559 \ testng-customsuite.xmllog4j: WARN कोई अपीलकर्ता लकड़हारा (org.apache.http.client.protocol.RequestAddCookies) के लिए नहीं मिल सका।log4j: WARN कृपया log4j सिस्टम को ठीक से इनिशियलाइज़ करें।log4j: WARN अधिक जानकारी के लिए http://log.apache.org/log4j/1.2/faq.html#noconfig देखें।पारित समय: 5022PASSED: लॉगिन करें==================================================डिफ़ॉल्ट परीक्षणटेस्ट चलते हैं: 1, विफलताएं: 0, कौशल: 0==================================================

एक्जीक्यूटस्क्रिप्ट का उदाहरण

निष्पादनों के लिए, हम एक-एक करके तीन अलग-अलग उदाहरण देखेंगे।

1) उदाहरण: JavaScriptExecutor का उपयोग करके अलर्ट विंडो को लॉगिन और जेनरेट करने के लिए एक बटन पर क्लिक करें।

इस परिदृश्य में, हम JavaScriptExecutor को दर्शाने के लिए "Guru99" डेमो साइट का उपयोग करेंगे। इस उदाहरण में,

  • वेब ब्राउज़र लॉन्च करें
  • साइट खोलें "http://demo.guru99.com/V4/" और
  • क्रेडेंशियल के साथ लॉगिन करें
  • सफल लॉगिन पर अलर्ट विंडो प्रदर्शित करें।
आयात org.openqa.selenium.By;आयात org.openqa.selenium.JavascriptExecutor;आयात org.openqa.selenium.WebDriver;आयात org.openqa.selenium.WebElement;आयात org.openqa.selenium.firefox.FirefoxDriver;आयात org.testng.annotations.Test;पब्लिक क्लास JavaSE_Test {@परीक्षासार्वजनिक शून्य लॉगिन (){{WebDriver ड्राइवर = नया FirefoxDriver ();// टाइप कास्टिंग के द्वारा JavascriptExecutor इंटरफ़ेस ऑब्जेक्ट बनानाJavascriptExecutor js = (JavascriptExecutor) ड्राइवर;// साइट को लॉन्च करना।Driver.get ("http://demo.guru99.com/V4/");WebElement बटन = driver.findElement (By.name ("btnLogin"));// Guru99 पर लॉगइन करेंDriver.findElement (By.name ("uid"))। sendKeys ("mngr34926");Driver.findElement (By.name ("पासवर्ड")। sendKeys ("amUpenu");// JavascriptExecutor का उपयोग करके LOGIN बटन पर क्लिक करेंjs.executeScript ("तर्क [0] .click ();", बटन);// जावास्क्रिप्ट जावास्क्रिप्ट का उपयोग कर अलर्ट विंडो उत्पन्न करने के लिए। अलर्ट संदेश प्रदर्शित करेंjs.executeScript ("अलर्ट (गुरु99 में आपका स्वागत है)";));}}

आउटपुट: जब कोड सफलतापूर्वक निष्पादित किया जाता है। आप अवलोकन करेंगे

  • लॉगिन बटन पर सफल क्लिक करें और
  • चेतावनी विंडो प्रदर्शित होगी (नीचे चित्र देखें)।

2) उदाहरण: कैप्चर डेटा को कैप्चर करें और JavaScriptExecutor का उपयोग करके विभिन्न पृष्ठों पर नेविगेट करें।

नीचे दी गई सेलेनियम स्क्रिप्ट निष्पादित करें। इस उदाहरण में,

  • साइट लॉन्च करें
  • साइट के URL, शीर्षक नाम और साइट के डोमेन नाम जैसी साइट का विवरण प्राप्त करें।
  • फिर एक अलग पेज पर जाएँ।
आयात org.openqa.selenium.JavascriptExecutor;आयात org.openqa.selenium.WebDriver;आयात org.openqa.selenium.firefox.FirefoxDriver;आयात org.testng.annotations.Test;पब्लिक क्लास JavaSE_Test {@परीक्षासार्वजनिक शून्य लॉगिन (){{WebDriver ड्राइवर = नया FirefoxDriver ();// टाइप कास्टिंग के द्वारा JavascriptExecutor इंटरफ़ेस ऑब्जेक्ट बनानाJavascriptExecutor js = (JavascriptExecutor) ड्राइवर;// साइट को लॉन्च करना।Driver.get ("http://demo.guru99.com/V4/");// साइट का डोमेन नाम लाना। Tostring () नाम के लिए ऑब्जेक्ट बदलें।स्ट्रिंग डोमेननाम = js.executeScript ("रिटर्न डॉक्यूमेंट.डोमेन;") .String ();System.out.println ("साइट का डोमेन नाम =" + DomainName);// साइट का URL प्राप्त करना। Tostring () नाम के लिए ऑब्जेक्ट बदलेंस्ट्रिंग url = js.executeScript ("रिटर्न डॉक्यूमेंट .URL;") .String ();System.out.println ("साइट का URL =" + url);// विधि document.title साइट का शीर्षक नाम प्राप्त करें। Tostring () नाम के लिए ऑब्जेक्ट बदलेंस्ट्रिंग शीर्षकनाम = js.executeScript ("रिटर्न डॉक्यूमेंट.टिटेल;") .String ();System.out.println ("पृष्ठ का शीर्षक =" + शीर्षकनाम);// एक्सेस पेज जेनरेट करने के लिए नए पेज पर नेविगेट करें। (लॉन्च नया url)js.executeScript ("window.location = 'http://demo.guru99.com/'");}}

आउटपुट: जब उपरोक्त कोड सफलतापूर्वक निष्पादित किया जाता है, तो यह साइट का विवरण प्राप्त करेगा और नीचे दिखाए गए अनुसार अलग-अलग पृष्ठ पर नेविगेट करेगा।

[TestNG] रनिंग:C: \ Users \ gauravn \ AppData \ Local \ Temp \ testng-eclipse-467151014 \ testng-customsuite.xmllog4j: WARN कोई अपीलकर्ता लकड़हारा (org.apache.http.client.protocol.RequestAddCookies) के लिए नहीं मिल सका।log4j: WARN कृपया log4j सिस्टम को ठीक से इनिशियलाइज़ करें।log4j: WARN अधिक जानकारी के लिए http://log.apache.org/log4j/1.2/faq.html#noconfig देखें।साइट का डोमेन नाम = Demo.guru99.comसाइट का URL = http://demo.guru99.com/V4/पृष्ठ का शीर्षक = गुरु ९९ बैंक होम पेजPASSED: लॉगिन करें==================================================डिफ़ॉल्ट परीक्षणटेस्ट चलते हैं: 1, विफलताएं: 0, कौशल: 0================================================== 

3) उदाहरण: स्क्रॉल डाउनिंग JavaScriptExecutor।

नीचे दी गई सेलेनियम स्क्रिप्ट निष्पादित करें। इस उदाहरण में,

  • साइट लॉन्च करें
  • 600 पिक्सेल नीचे स्क्रॉल करें
आयात org.openqa.selenium.JavascriptExecutor;आयात org.openqa.selenium.WebDriver;आयात org.openqa.selenium.firefox.FirefoxDriver;आयात org.testng.annotations.Test;पब्लिक क्लास JavaSE_Test {@परीक्षासार्वजनिक शून्य लॉगिन (){{WebDriver ड्राइवर = नया FirefoxDriver ();// टाइप कास्टिंग के द्वारा JavascriptExecutor इंटरफ़ेस ऑब्जेक्ट बनानाJavascriptExecutor js = (JavascriptExecutor) ड्राइवर;// साइट को लॉन्च करना।Driver.get ("http://moneyboats.com/");// अधिकतम विंडोDriver.manage ()। window ()। मैक्सिमम ();// 600 पिक्सेल से लंबवत स्क्रॉलjs.executeScript ("window.scrollBy (0,600)");}}

आउटपुट : जब उपरोक्त कोड निष्पादित किया जाता है, तो यह 600 पिक्सेल नीचे स्क्रॉल करेगा (नीचे चित्र देखें)।

सारांश:

जब सेलेनियम वेबड्राइवर किसी मुद्दे के कारण किसी भी तत्व पर क्लिक करने में विफल रहता है तो JavaScriptExecutor का उपयोग किया जाता है।

  • JavaScriptExecutor हैंडल करने के लिए दो तरीके "executecript" और "executeAsyncScript" प्रदान करता है।
  • सेलेनियम वेबड्राइवर का उपयोग करके जावास्क्रिप्ट को निष्पादित किया गया।
  • किसी भी समस्या के कारण सेलेनियम तत्व पर क्लिक करने में विफल रहने पर, JavaScriptExecutor के माध्यम से किसी तत्व पर क्लिक करने के बारे में बताया गया है।
  • JavaScriptExecutor का उपयोग करके 'अलर्ट' विंडो तैयार की।
  • JavaScriptExecutor का उपयोग करके अलग-अलग पृष्ठ पर नेविगेट किया गया।
  • JavaScriptExecutor का उपयोग करके विंडो को नीचे स्क्रॉल किया गया।
  • JavaScriptExecutor का उपयोग करके प्राप्त URL, शीर्षक और डोमेन नाम।