सिकुली ट्यूटोरियल के लिए Selenium स्वचालन

⚡ स्मार्ट सारांश

सिकुली लोकेटर के बजाय संग्रहीत स्क्रीनशॉट को पहचानकर एक ग्राफिकल इंटरफेस को स्वचालित करता है, जिससे एक Selenium टेस्ट ड्राइव करें Windows पॉपअप, नेटिव फ़ाइल डायलॉग और फ़्लैश ऑब्जेक्ट जिन तक वेबड्राइवर अकेले नहीं पहुंच सकता।

  • 🔘 मूल विचार: प्रत्येक तत्व को पीएनजी फ़ाइल के रूप में संग्रहीत किया जाता है, और सिकुली स्क्रीन पर पिक्सेल का मिलान करके उसे ढूंढता है।
  • सेटअप: जोड़ें SikuliX एपीआई जार Java इसके बगल में पथ बनाएं Selenium जार।
  • स्क्रीन क्लास: यह क्लिक, डबलक्लिक, टाइप, होवर और फाइंड जैसे विकल्प प्रदान करता है, जिनमें से प्रत्येक एक छवि नाम लेता है।
  • 🧪 पैटर्न वर्ग: यह एक इमेज पाथ को रैप करता है और similar() और exact() का उपयोग करके मिलान को ट्यून करता है।
  • उदाहरण सहित: क्रोम टेस्ट में 'फ़ाइल चुनें' पर क्लिक किया जाता है, फिर सिकुली पाथ टाइप करता है और 'खोलें' पर क्लिक करता है।
  • ⚙️ सीमा: रिज़ॉल्यूशन या पिक्सेल आकार में परिवर्तन से मिलान बाधित हो जाता है और FindFailed त्रुटि उत्पन्न होती है।

सिकुली ट्यूटोरियल के लिए Selenium स्वचालन

सिकुली क्या है? 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 और प्रोजेक्ट पर राइट क्लिक करके -> बिल्ड पाथ -> कॉन्फ़िगर बिल्ड पाथ का उपयोग करके, नीचे दिखाए अनुसार, सेलेनियम जार फ़ाइलों के साथ जार फ़ाइल को बिल्ड पाथ में जोड़ें।

सिकुली जेएआर फ़ाइल को इसमें जोड़ा गया है 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नीचे दिखाए गए अनुसार ' और 'ओपन' बटन।

Snipping Tool चयन पर Windows अपलोड पॉपअप पर फ़ाइल इनपुट टेक्स्ट बॉक्स

आपका स्क्रीनशॉट कुछ इस तरह दिखना चाहिए:

कैप्चर की गई फ़ाइल का पाठ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();

उत्पादन

प्रारंभ में, स्क्रिप्ट क्रोम ब्राउज़र खोलता है

रन शुरू होते ही क्रोम ब्राउज़र डेमो फ़ाइल अपलोड पेज पर खुल गया।

'फ़ाइल चुनें' बटन पर क्लिक करने पर, विंडोज़ फ़ाइल पॉपअप स्क्रीन दिखाई देगी। फ़ाइल इनपुट टेक्स्टबॉक्स में डेटा दर्ज करें और 'ओपन' बटन पर क्लिक करें

Windows फ़ाइल इनपुट टेक्स्ट बॉक्स में टाइप किए गए फ़ाइल पथ के साथ फ़ाइल पॉपअप खुलता है

फ़ाइल अपलोड पूर्ण होने और ब्राउज़र बंद होने पर नीचे दी गई स्क्रीन प्रदर्शित होती है

ब्राउज़र बंद होने से ठीक पहले अपलोड पूरा होने की पुष्टि करने वाला डेमो पेज।

क्योंकि मिलान पिक्सल पर निर्भर करता है, इसलिए इंटरफ़ेस को रीस्टाइल करते समय हर संदर्भ छवि को पुनः कैप्चर करें। इसी खामी के कारण टीमें सिकुली को पॉपअप के लिए आरक्षित रखती हैं। सामान्य वेबड्राइवर फ़ाइल प्रबंधन नहीं पहूंच सकता।

अक्सर पूछे जाने वाले प्रश्न

स्क्रीन पर संदर्भ छवि का मिलान नहीं हुआ। इसके सामान्य कारण भिन्न रिज़ॉल्यूशन, छवि का आकार बदलना, थीम का नया स्वरूप या तत्व का अभी तक दिखाई न देना हो सकते हैं। रन रिज़ॉल्यूशन या कम समानता पर पुनः कैप्चर करें।

Selenium यह लोकेटर के माध्यम से ब्राउज़र DOM को नियंत्रित करता है। सिकुली स्क्रीनशॉट के माध्यम से स्क्रीन को नियंत्रित करता है, इसलिए यह उन नेटिव डायलॉग तक पहुँचता है जिन्हें DOM कभी प्रदर्शित नहीं करता। इन दोनों का एक साथ उपयोग किया जाता है।

हाँ। घोषणा करें com.sikulix:sikulixapi एक निर्भरता के रूप में और मेवन उसी एपीआई को खींचता है, कीping बिल्ड फ़ाइल में मौजूद संस्करण, न कि कोई अन्य संस्करण। Eclipse निर्माण पथ।

हाँ, SikuliX इससे संचालित Windows, लिनक्स और macOSसंदर्भ छवियां एक प्लेटफॉर्म से दूसरे प्लेटफॉर्म पर स्थानांतरित नहीं की जा सकतीं, क्योंकि सजावट और फ़ॉन्ट अलग-अलग होते हैं, इसलिए प्रत्येक प्लेटफॉर्म को अपनी अलग-अलग छवियों की आवश्यकता होती है।

मशीन लर्निंग मैचर्स रंग, स्केल और थीम में होने वाले बदलावों को सहन कर सकते हैं, जिन्हें पिक्सेल तुलना सहन नहीं कर सकती, और लेबल के आधार पर कंट्रोल का पता लगा सकते हैं। इससे रीडिजाइन के बाद आवश्यक पुनः कैप्चर कार्य में कमी आती है।

गिटहब कोपिलॉट यह ड्राफ्ट स्क्रीन और पैटर्न कॉल और उनके आसपास वेबड्राइवर सेटअप तैयार करता है। यह PNG फ़ाइलों को कैप्चर नहीं कर सकता, इसलिए प्रत्येक जनरेट की गई इमेज के पाथ को सत्यापित करें।

इंटरफ़ेस के डिज़ाइन में बदलाव होने या रिज़ॉल्यूशन बदलने पर मिलान प्रक्रिया बाधित हो जाती है, यह DOM ऑटोमेशन की तुलना में धीमी गति से चलती है और विफलताओं की रिपोर्ट कम स्पष्ट रूप से देती है। यह उन इंटरफ़ेसों के लिए उपयुक्त है जिनमें बदलाव बहुत कम होते हैं।

मूल सिकुली अनुसंधान परियोजना नहीं, बल्कि उसकी उत्तराधिकारी परियोजना है। SikuliX यह यहाँ प्रयुक्त sikulixapi आर्टिफैक्ट को प्रकाशित करता है। सादे sikuli-script JAR का हवाला देने वाले लेख पिछली पंक्ति का वर्णन करते हैं।

इस पोस्ट को संक्षेप में इस प्रकार लिखें: