Sikuli tutorial: kung paano gamitin ang Sikuli sa Selenium (halimbawa)

Sikuli Tutorial How Use Sikuli With Selenium



Sa tutorial na ito sasakupin namin ang sumusunod:

Ano ang Sikuli?

Opisyal na dokumento ng website: https://sikulix-2014.readthedocs.io/en/latest/index.html
Ang Sikuli ay isang tool na bukas na mapagkukunan na batay sa GUI. Ginagamit ito upang makipag-ugnay sa mga elemento ng Web page at iproseso ang mga windows-based na pop-up windows (pahina). Gumagamit ito ng teknolohiyang 'pagkilala sa imahe' upang makipag-ugnay sa mga elemento ng mga pop-up window ng web page. Tinatrato ni Sikuli ang lahat ng mga elemento ng isang web page bilang mga imahe at kinikilala ang mga elementong ito batay sa kanilang mga imahe. Ang Sikuli ay ang unang pagpipilian kapag ang mga elemento ng UI ay matatag at hindi madalas na nagbabago.

Pagsasama ng Sikuli at Selenium Webdriver

Maaaring gamitin ng Sikuli ang mga Sikuli JAR file upang isama sa selenium webdriver.
Ang sumusunod na pagkakasunud-sunod ay isang listahan ng mga hakbang upang mai-configure ang Sikuli gamit ang selenium webdriver.



[Isa pang paraan upang mai-configure ang Jar package sa Maven:]



Hakbang 1) I-download ang sikuli JAR package mula sa sumusunod na URL: (tulad ng sikulixsetup-1.1.3.jar)
https://launchpad.net/sikuli/+download
cdm Ipasok ang direktoryo ng file kung saan matatagpuan ang sikulixsetup, at ipatupad ang Jar package: java -jar sikulixsetup-1.1.3.jar
Jar
Jar
imahe
Oo
imahe
CMD
Ang bagong nabuong pakete ng garapon ay ipinapakita sa ibaba:
garapon
Hakbang 2) Pagkatapos ay lumikha ng isang bagong proyekto ng JAVA sa Eclipse, at gumamit ng proyektong pag-click sa kanan -> Build Path -> I-configure ang Build Path upang idagdag ang JAR file sa build path at ang Selenium jar package.



org.seleniumhq.selenium selenium-java 3.14.0

Proyekto
Kapag naidagdag na ang JAR file sa landas ng pagbuo ng proyekto, maaari mong gamitin ang mga klase na ibinigay ng Sikuli.

Tip: Kung hindi mo susundin ang pamamaraang nasa itaas, maaaring hindi matagumpay ang pagpapatupad at patuloy na nag-uulat ang Sikuli ng isang error ** [error] RunTimeINIT: pagwawakas: libs upang mai-export na hindi natagpuan sa itaas ng classpath: / sikulixlibs / windows / libs64 **

Screen ng klase ni Sikuli

Ang klase ng Screen ay ang batayang klase para sa lahat ng mga pamamaraan na ibinigay ng Sikuli. Naglalaman ang klase ng Screen ng paunang natukoy na mga pamamaraan para sa lahat ng mga karaniwang pagpapatakbo sa mga elemento ng screen, tulad ng pag-click, pag-double click, pagbibigay ng input sa kahon ng teksto, pag-hover, atbp. Ang sumusunod ay isang listahan ng mga karaniwang pamamaraan na ibinigay ng klase ng Screen



Pamamaraan Paglalarawan Syntax
Mag-click Ang pamamaraang ito ay ginagamit upang mag-click sa isang elemento sa screen gamit ang pangalan ng imahe bilang isang parameter. Screen s = bagong Screen () s.click (“QA.png”)
double-click Ginagamit ang pamamaraang ito upang mai-double click ang elemento. Tumatanggap ito ng pangalan ng imahe bilang isang parameter. Screen s = bagong Screen () s.doubleClick (“QA.png”)
Input ng uri Ang pamamaraang ito ay ginagamit upang magbigay ng mga halaga ng pag-input sa elemento. Tumatanggap ito ng pangalan ng imahe at teksto bilang mga parameter. s.type ('QA.png', 'TEXT')
Magpasadya Ang pamamaraang ito ay ginagamit upang i-hover ang mouse sa ibabaw ng elemento. Tumatanggap ito ng pangalan ng imahe bilang isang parameter. s.hover (“QA.png”)
Hanapin Ginagamit ang pamamaraang ito upang makahanap ng mga tukoy na elemento sa screen. Tumatanggap ito ng pangalan ng imahe bilang isang parameter. s.find (“QA.png”)

Huwaran ni Sikuli

Ginagamit ang klase ng pattern upang maiugnay ang mga file ng imahe sa iba pang mga katangian upang natatanging kilalanin ang mga elemento. Kinukuha nito ang landas ng imahe bilang isang parameter.
Pattern p = bagong pattern ('Landas ng imahe')
Ang mga sumusunod ay ang pinaka-karaniwang ginagamit na pamamaraan ng mga klase ng pattern.

Pamamaraan Paglalarawan Syntax
getFileName Ibinabalik ang pangalan ng file na nilalaman sa pattern ng object. Pattern p = bagong pattern ('D: Demo QA.png') String filename = p.getFileName ()
katulad Ang pamamaraang ito ay nagbabalik ng isang bagong bagay sa Pattern na ang pagkakatulad ay nakatakda sa tinukoy na halaga. Tumatanggap ito ng halaga ng pagkakatulad sa pagitan ng 0 at 1 bilang isang parameter. Nahanap ng Sikuli ang lahat ng mga elemento na kabilang sa tinukoy na katulad na saklaw at nagbabalik ng isang bagong object ng pattern. Pattern p1 = p.s katulad (0.7f)
Sakto Ang pamamaraang ito ay nagbabalik ng isang bagong bagay sa Pattern na may pagkakatulad na nakatakda sa 1. Nahahanap lamang nito ang Eksaktong tugma . Pattern p1 = p. Eksaktong ()

Halimbawa ng code para sa pag-upload ng mga file gamit ang Sikuli

Ipinapaliwanag ng sumusunod na code kung paano mag-upload ng mga file sa Chrome browser gamit ang Sikuli.
// Huwag direktang mag-download ng sikuli.script.jar at mag-import , Dapat mabuo sa itaas na paraan.

package com.morningstar.sikuli 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', 'resources/Driver/chromedriver.exe') String filepath = 'resources/' String inputFilePath = 'resources/' 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('http://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() } }

Pagsalin ng code:
Hakbang 1) 、 Ang unang pahayag ay nagsasangkot ng pagtatakda ng driver na maipapatupad na landas para sa chrome.

System.setProperty('webdriver.chrome.driver', 'D:\ chromedriver.exe')

Hakbang 2) 、 Gumamit ng isang tool sa screenshot tulad ng isang tool sa screenshot upang kumuha ng isang screenshot ng mga pop-up na 'FileTextBox' at mga pindutang 'Buksan'.
imahe
Dapat ganito ang hitsura ng iyong screenshot:
imahe
Windows file Mag-input ng kahon ng teksto kasama Buksan ang pindutan Ang mga imahe ay nakaimbak bilang 'FileTextBox.PNG' at 'Openbutton.PNG'.
Gumagamit si Sikuli ng teknolohiyang pagkilala ng imahe upang makilala ang mga elemento sa screen. Mahahanap lamang ang elemento sa screen batay sa imahe nito.
Halimbawa: kung nais mong buksan awtomatiko ang Notepad, kailangan mong iimbak ang imahe ng Notepad desktop icon sa isang PNG file at magsagawa ng isang solong operasyon dito.
Sa aming halimbawa sa itaas, kinikilala ito Kahon ng teksto ng input ng file At gamitin ang nakaimbak na imahe upang buksan ang pindutan sa window ng pop-up ng Windows. Kung ang resolusyon ng screen ay binago mula sa pagkuha ng imahe upang subukan ang pagpapatupad ng script, ang mga resulta ni Sikuli ay hindi naaayon. Samakatuwid, palaging inirerekumenda na patakbuhin ang script ng pagsubok sa parehong resolusyon ng nakunan ng imahe. Ang pagbabago ng laki ng pixel ng imahe ay magdudulot sa Sikuli na magtapon ng pagbubukod sa FindFailed.

Hakbang 3) 、 Kasama sa mga sumusunod na pahayag ang paglikha ng mga bagay sa Screen at pattern. Lumikha ng isang bagong object ng screen. Itakda ang na-upload na file path sa parameter ng pattern na object.

Screen s = new Screen() Pattern fileInputTextBox = new Pattern(filepath + 'FileTextBox.PNG') Pattern openButton = new Pattern(filepath + 'OpenButton.PNG')

Hakbang 4) Kasama sa sumusunod na pahayag ang pagbubukas ng URL gamit ang browser ng Chrome: http://demo.guru99.com/test/image_upload/index.php

driver = new ChromeDriver() driver.get('http://demo.guru99.com/test/image_upload/index.php')

Ang URL sa itaas ay isang application ng demo na nagpapakita ng pagpapaandar ng pag-upload ng file.

Hakbang 5) I-click ang button na pumili ng file upang magamit ang sumusunod na pahayag

driver.findElement(By.xpath('.//*[@id='photoimg']')).click()

Hakbang 6) Hintaying lumitaw ang window ng pop-up. Ginagamit ang pamamaraang Maghintay upang hawakan ang pagkaantala na nauugnay sa pop-up window pagkatapos ng pag-click sa pindutan ng pag-browse.

s.wait(fileInputTextBox, 20)

Hakbang 7) Ipasok ang file path sa kahon ng teksto ng 'Input File', at pagkatapos ay i-click ang pindutang 'Buksan'

s.type(fileInputTextBox, inputFilePath + 'Test.docx') s.click(openButton)

Hakbang 8) Isara ang browser

driver.close()

Sa wakas:
Sa una, binuksan ng script ang browser
imahe
I-click ang pindutang 'Piliin ang File', at lilitaw ang isang window file pop-up window. Ipasok ang file ng input ng data sa text box at i-click ang pindutang 'Buksan'
imahe
Matapos i-upload ang file at isara ang browser, ipapakita ang sumusunod na screen
imahe
sa konklusyon:
Ginagamit ang Sikuli upang maproseso ang mga flash object sa mga web page at Windows pop-up windows. Kapag ang mga elemento sa interface ng gumagamit ay hindi madalas na nagbabago, mas mahusay na gamitin ang Sikuli. Dahil sa kakulangan na ito, mula sa pananaw ng awtomatikong pagsusuri, ang Sikuli ay may mas kaunting mga kagustuhan kumpara sa iba pang mga balangkas (tulad ng Robot at AutoIT).

Dagdag na Kwento ----- Pagpapatunay ng Larawan:

Maaaring gamitin ang Sikuli upang makilala kung mayroong isang tiyak na bahagi ng larawan sa larawan. Ito ay napaka kapaki-pakinabang, tulad ng pag-check kung mayroong isang halatang logo o mga katulad sa isang buong larawan.

String imgPath = 'xxxx/image.png' Screen s = new Screen() boolean test = s.exists(imgPath).isValid() System.out.println('########Test======'+test)

o:

String imgPath = 'xxxx/image.png' Screen s = new Screen() Assert.assertTrue(s.exists(imgPath).isValid(), 'can not find the LOGO:' + Page1And16) . . . //Search based on image object public static boolean isExist(String iconPath) throws FindFailed{ boolean isVaild = false pattern = new Pattern(iconPath) screen = new Screen() try { //screen.wait(iconPath, 20) Image image = screen.find(pattern).getImage() System.out.println('########IMAGE===='+image) isVaild = image != null } catch (FindFailed e) { e.printStackTrace() System.err.println(e.getMessage()) } clear() return isVaild } public static void clear(){ if(pattern != null){ pattern = null } if(screen != null){ screen = null } }