सिकुली ट्यूटोरियल के लिए Selenium स्वचालन
⚡ स्मार्ट सारांश
सिकुली लोकेटर के बजाय संग्रहीत स्क्रीनशॉट को पहचानकर एक ग्राफिकल इंटरफेस को स्वचालित करता है, जिससे एक Selenium टेस्ट ड्राइव करें Windows पॉपअप, नेटिव फ़ाइल डायलॉग और फ़्लैश ऑब्जेक्ट जिन तक वेबड्राइवर अकेले नहीं पहुंच सकता।
सिकुली क्या है? Selenium?
सिकुली एक ओपन-सोर्स GUI आधारित परीक्षण स्वचालन उपकरण है। इसका उपयोग मुख्य रूप से वेब पेजों के तत्वों के साथ बातचीत करने और विंडोज़ आधारित पॉपअप को संभालने के लिए किया जाता है। सिकुली वेब पेजों और विंडोज़ पॉपअप के तत्वों के साथ बातचीत करने के लिए “इमेज रिकॉग्निशन” और “कंट्रोल GUI” की तकनीक का उपयोग करता है। सिकुली में, सभी वेब तत्वों को छवियों के रूप में लिया जाता है और प्रोजेक्ट के अंदर संग्रहीत किया जाता है।
⚠️ नामकरण संबंधी टिप्पणी: आज भी इस परियोजना को इसी रूप में बनाए रखा जा रहा है। SikuliXमेवन सेंट्रल पर प्रकाशित com.sikulix:sikulixapiनीचे दिए गए क्लास के नाम अपरिवर्तित हैं।
सिकुली का उपयोग कैसे करें Selenium वेबड्राइवर
सिकुली को इसके साथ एकीकृत किया जा सकता है Selenium नीचे दिए गए दो चरणों में सिकुली जार फ़ाइल का उपयोग करके वेबड्राइवर का उपयोग करें।
चरण 1) डाउनलोड करें नीचे दी गई सिकुली JAR फ़ाइल का उपयोग करें URL, और पूर्वtracज़िप फ़ाइल की सामग्री को एक फ़ोल्डर में कॉपी करें।
https://mvnrepository.com/artifact/com.sikulix/sikulixapi/2.0.5
चरण 2) में एक नया JAVA प्रोजेक्ट बनाएं Eclipse और प्रोजेक्ट पर राइट क्लिक करके -> बिल्ड पाथ -> कॉन्फ़िगर बिल्ड पाथ का उपयोग करके, नीचे दिखाए अनुसार, सेलेनियम जार फ़ाइलों के साथ जार फ़ाइल को बिल्ड पाथ में जोड़ें।
एक बार जब आप JAR फ़ाइल को प्रोजेक्ट बिल्ड पाथ में जोड़ देते हैं, तो Sikuli द्वारा प्रदान की गई क्लास का उपयोग किया जा सकता है। Maven प्रोजेक्ट इसके बजाय उसी आर्टिफैक्ट को डिपेंडेंसी के रूप में घोषित कर सकता है।
सिकुली में स्क्रीन क्लास
स्क्रीन क्लास सिकुली द्वारा प्रदान किए गए सभी मेथड्स का आधार है। स्क्रीन क्लास में स्क्रीन एलिमेंट्स पर आमतौर पर किए जाने वाले सभी ऑपरेशन्स जैसे क्लिक, डबल-क्लिक, टेक्स्ट बॉक्स में इनपुट देना, होवर करना आदि के लिए पूर्वनिर्धारित मेथड्स शामिल हैं। नीचे स्क्रीन क्लास द्वारा प्रदान किए गए आमतौर पर उपयोग किए जाने वाले मेथड्स की सूची दी गई है।
| विधि | विवरण | वाक्य - विन्यास |
|---|---|---|
| क्लिक करें | इस विधि का उपयोग छवि नाम को पैरामीटर के रूप में उपयोग करके स्क्रीन पर किसी तत्व पर क्लिक करने के लिए किया जाता है। |
स्क्रीन s = नई स्क्रीन(); s.क्लिक(“QA.png”); |
| डबल क्लिक करें | इस विधि का उपयोग किसी तत्व पर डबल क्लिक करने के लिए किया जाता है। यह छवि नाम को पैरामीटर के रूप में स्वीकार करता है। |
स्क्रीन s = नई स्क्रीन(); s.doubleClick("QA.png"); |
| प्रकार | इस विधि का उपयोग किसी तत्व को इनपुट मान प्रदान करने के लिए किया जाता है। यह छवि नाम और भेजे जाने वाले पाठ को पैरामीटर के रूप में स्वीकार करता है। |
s.type("QA.png"","टेक्स्ट"); |
| मंडराना | इस विधि का उपयोग किसी तत्व पर होवर करने के लिए किया जाता है। यह छवि नाम को पैरामीटर के रूप में स्वीकार करता है। |
s.hover("QA.png"); |
| खोज | इस विधि का उपयोग स्क्रीन पर किसी विशिष्ट तत्व को खोजने के लिए किया जाता है। यह छवि नाम को पैरामीटर के रूप में स्वीकार करता है। |
s.find("QA.png"); |
सिकुली में पैटर्न क्लास
जहां Screen क्लास केवल इमेज के नाम पर काम करती है, वहीं Pattern क्लास का उपयोग इमेज फ़ाइल को अतिरिक्त विशेषताओं से जोड़ने के लिए किया जाता है ताकि एलिमेंट को विशिष्ट रूप से पहचाना जा सके। यह इमेज का पाथ पैरामीटर के रूप में लेती है।
Pattern p = new Pattern(“Path of image”);
पैटर्न वर्ग की सबसे अधिक उपयोग की जाने वाली विधियाँ निम्नलिखित हैं।
| विधि | विवरण | वाक्य - विन्यास |
|---|---|---|
| फ़ाइलनाम प्राप्त करें | पैटर्न ऑब्जेक्ट में निहित फ़ाइल नाम लौटाता है. |
पैटर्न p = नया पैटर्न(“D:\Demo\QA.png”); स्ट्रिंग फ़ाइल नाम = p.getFileName(); |
| समान | यह विधि एक नया पैटर्न ऑब्जेक्ट लौटाती है जिसमें समानता निर्दिष्ट मान पर सेट होती है। यह 0 से 1 के बीच समानता मान को पैरामीटर के रूप में स्वीकार करता है। सिकुली उन सभी तत्वों की तलाश करता है जो निर्दिष्ट समानता सीमा के भीतर आते हैं और एक नया पैटर्न ऑब्जेक्ट लौटाता है। |
पैटर्न p1 = p.similar(0.7f); |
| ठीक | यह विधि समानता 1 पर सेट करके एक नया पैटर्न ऑब्जेक्ट लौटाती है। यह केवल निर्दिष्ट तत्व के सटीक मिलान की तलाश करती है। |
पैटर्न p1 = p.exact(); |
Code सिकुली का उपयोग करके फ़ाइल अपलोड करने का उदाहरण
नीचे दिया गया कोड क्रोम में फाइल अपलोड करने के लिए सिकुली के उपयोग को समझाता है।
package com.sikuli.demo; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.sikuli.script.FindFailed; import org.sikuli.script.Pattern; import org.sikuli.script.Screen; import org.openqa.selenium.chrome.ChromeDriver; public class SikuliDemo { public static void main(String[] args) throws FindFailed { System.setProperty("webdriver.chrome.driver", "D:\\chromedriver.exe"); String filepath = "D:\\Guru99Demo\\Files\\"; String inputFilePath = "D:\\Guru99Demo\\Files\\"; Screen s = new Screen(); Pattern fileInputTextBox = new Pattern(filepath + "FileTextBox.PNG"); Pattern openButton = new Pattern(filepath + "OpenButton.PNG"); WebDriver driver; // Open Chrome browser driver = new ChromeDriver(); driver.get("https://demo.guru99.com/test/image_upload/index.php"); // Click on Browse button and handle windows pop up using Sikuli driver.findElement(By.xpath(".//*[@id='photoimg']")).click(); s.wait(fileInputTextBox, 20); s.type(fileInputTextBox, inputFilePath + "Test.docx"); s.click(openButton); // Close the browser driver.close(); } }
Code व्याख्या
चरण 1) पहले कथन में क्रोम के लिए ड्राइवर निष्पादन योग्य पथ सेट करना शामिल है।
System.setProperty("webdriver.chrome.driver", "D:\\ chromedriver.exe");
⚠️ संस्करण नोट: Selenium 4 ड्राइवर बाइनरी को हल करता है Selenium प्रबंधक महोदय, यह पंक्ति अब वैकल्पिक है। इसे मूल पाठ के अनुसार ही रखा गया है।
चरण 2) स्क्रीनग्रैब टूल का उपयोग करें जैसे कि Snipping Tool विंडोज़ पॉपअप 'फ़ाइलटेक्स्ट' का स्क्रीनशॉट लेने के लिएBoxनीचे दिखाए गए अनुसार ' और 'ओपन' बटन।
आपका स्क्रीनशॉट कुछ इस तरह दिखना चाहिए:
विंडोज़ फ़ाइल इनपुट टेक्स्ट बॉक्स और ओपन बटन के लिए छवियाँ 'फ़ाइलटेक्स्ट' पर संग्रहीत की जाती हैंBox.PNG' और 'OpenButton.PNG'.
उदाहरण: यदि आप नोटपैड खोलने के संचालन को स्वचालित करना चाहते हैं, तो आपको नोटपैड के लिए डेस्कटॉप आइकन की छवि को PNG फ़ाइल पर संग्रहीत करना होगा और उस पर क्लिक ऑपरेशन करना होगा।
हमारे मामले में, यह फ़ाइल इनपुट टेक्स्ट बॉक्स और ओपन बटन को पहचानता है। Windows संग्रहीत छवियों का उपयोग करके पॉपअप। यदि स्क्रीन रिज़ॉल्यूशन छवि कैप्चर से परीक्षण स्क्रिप्ट निष्पादन में बदल जाता है, तो सिकुली का व्यवहार असंगत होगा। इसलिए हमेशा उसी रिज़ॉल्यूशन पर परीक्षण स्क्रिप्ट चलाने की सलाह दी जाती है जिस पर छवियां कैप्चर की जाती हैं। छवियों के पिक्सेल आकार में परिवर्तन के परिणामस्वरूप सिकुली एक FindFailed अपवाद फेंक देगा।
चरण 3) अगले कथनों में स्क्रीन और पैटर्न क्लास के लिए ऑब्जेक्ट बनाना शामिल है। एक नया स्क्रीन ऑब्जेक्ट बनाएँ। पैटर्न ऑब्जेक्ट के पैरामीटर के रूप में उस फ़ाइल का पथ सेट करें जिसे आप अपलोड करना चाहते हैं।
Screen s = new Screen(); Pattern fileInputTextBox = new Pattern(filepath + "FileTextBox.PNG"); Pattern openButton = new Pattern(filepath + "OpenButton.PNG");
चरण 4) नीचे दिए गए कथनों में क्रोम ब्राउज़र को खोलने का उल्लेख है। URL एक डेमो फाइल अपलोड एप्लिकेशन का: https://demo.guru99.com/test/image_upload/index.php
driver = new ChromeDriver(); driver.get("https://demo.guru99.com/test/image_upload/index.php");
चरण 5) नीचे दिए गए कथन का उपयोग करके फ़ाइल चुनें बटन पर क्लिक करें
driver.findElement(By.xpath(".//*[@id='photoimg']")).click();
चरण 6) विंडोज़ पॉपअप के प्रकट होने की प्रतीक्षा करें। ब्राउज़ बटन पर क्लिक करने के बाद विंडोज़ पॉपअप खुलने से जुड़ी देरी को संभालने के लिए प्रतीक्षा विधि का उपयोग किया जाता है।
s.wait(fileInputTextBox, 20);
चरण 7) इनपुट फ़ाइल टेक्स्ट बॉक्स में फ़ाइल पथ टाइप करें और ओपन बटन पर क्लिक करें
s.type(fileInputTextBox, inputFilePath + "Test.docx");
s.click(openButton);
चरण 8) ब्राउज़र बंद करें
driver.close();
उत्पादन
प्रारंभ में, स्क्रिप्ट क्रोम ब्राउज़र खोलता है
'फ़ाइल चुनें' बटन पर क्लिक करने पर, विंडोज़ फ़ाइल पॉपअप स्क्रीन दिखाई देगी। फ़ाइल इनपुट टेक्स्टबॉक्स में डेटा दर्ज करें और 'ओपन' बटन पर क्लिक करें
फ़ाइल अपलोड पूर्ण होने और ब्राउज़र बंद होने पर नीचे दी गई स्क्रीन प्रदर्शित होती है
क्योंकि मिलान पिक्सल पर निर्भर करता है, इसलिए इंटरफ़ेस को रीस्टाइल करते समय हर संदर्भ छवि को पुनः कैप्चर करें। इसी खामी के कारण टीमें सिकुली को पॉपअप के लिए आरक्षित रखती हैं। सामान्य वेबड्राइवर फ़ाइल प्रबंधन नहीं पहूंच सकता।






