Sikuli Урок за Selenium Автоматизация

⚡ Умно обобщение

Sikuli автоматизира графичен интерфейс, като разпознава съхранени екранни снимки, а не локатори, което позволява на Selenium тест драйв Windows изскачащи прозорци, диалогови прозорци за файлове с оригинален интерфейс и Flash обекти, до които WebDriver сам по себе си не може да достигне.

  • 🔘 Основна идея: Всеки елемент се съхранява като PNG файл, а Sikuli го намира чрез съпоставяне на пиксели на екрана.
  • ☑️ Setup: Добавете SikuliX API JAR към Java изградете пътека до Selenium JAR файлове.
  • ✅ Клас на екрана: Предоставя кликване, двойно кликване, въвеждане на текст, задържане на курсора и намиране, като всяко от тях приема име на изображение.
  • 🧪 Клас на шаблона: Обгръща пътя на изображението и настройва съвпадението чрез similar() и exact().
  • 🛠️ Разработен пример: Тест в Chrome кликва върху „Избор на файл“, след което Sikuli въвежда пътя и кликва върху „Отваряне“.
  • ️ Ограничение: Промяна в резолюцията или размера на пикселите прекъсва съвпадението и поражда FindFailed.

Sikuli Урок за Selenium Автоматизация

В какво е Сикули Selenium?

Сикули е инструмент за автоматизиране на тестове, базиран на GUI с отворен код. Използва се главно за взаимодействие с елементи на уеб страници и обработка на изскачащи прозорци. Sikuli използва техниката на „разпознаване на изображения“ и „контролен GUI“, за да взаимодейства с елементи на уеб страници и изскачащи прозорци. В Sikuli всички уеб елементи се вземат като изображения и се съхраняват в проекта.

⚠️ Бележка за именуване: проектът се поддържа и днес като SikuliX, публикувано в Maven Central като com.sikulix:sikulixapiИмената на класовете по-долу са непроменени.

Как да използвате Sikuli с Selenium Уебдрайвер

Sikuli може да се интегрира с Selenium WebDriver, използвайки JAR файла Sikuli, в двете стъпки по-долу.

Стъпка 1) Изтеглете JAR файлът Sikuli отдолу URLи бившtracсъдържанието на ZIP файла в папка.

https://mvnrepository.com/artifact/com.sikulix/sikulixapi/2.0.5

Стъпка 2) Създайте нов JAVA проект в Eclipse и добавете JAR файла към пътя за изграждане, заедно със selenium jar файловете, като използвате десен бутон върху проекта -> Път за изграждане -> Конфигуриране на пътя за изграждане, както е показано по-долу.

JAR файлът на Sikuli е добавен към Java изгради път в Eclipse Конфигуриране на пътя за изграждане

След като добавите JAR файла към пътя за компилация на проекта, могат да се използват класове, предоставени от Sikuli. Maven проект може да декларира същия артефакт като зависимост.

Екран клас в Сикули

Класът Screen е базовият клас за всички методи, предоставяни от Sikuli. Класът Screen съдържа предварително дефинирани методи за всички често извършвани операции върху екранни елементи, като щракване, двойно щракване, въвеждане на данни в текстово поле, задържане на курсора на мишката и др. По-долу е даден списък с често използвани методи, предоставяни от класа Screen.

Начин на доставка Descriptйон Синтаксис
Кликнете Този метод се използва за щракване върху елемент на екрана, като се използва името на изображението като параметър.

Екран s = нов екран ();

s.click(“QA.png”);

двойно щракване Този метод се използва за двойно щракване върху елемент. Той приема името на изображението като параметър.

Екран s = нов екран ();

s.doubleClick(“QA.png”);

Тип Този метод се използва за предоставяне на входна стойност на елемент. Той приема името на изображението и текста, които да бъдат изпратени като параметри.

s.type(“QA.png”,”TEXT”);

мътя Този метод се използва за задържане на курсора на мишката върху елемент. Той приема името на изображението като параметър.

s.hover(“QA.png”);

Какво Този метод се използва за намиране на определен елемент на екрана. Той приема името на изображението като параметър.

s.find(“QA.png”);

Клас по модел в Сикули

Докато Screen действа върху обикновено име на изображение, класът Pattern се използва за свързване на файла с изображение с допълнителни атрибути, за да идентифицира уникално елемента. Той приема пътя на изображението като параметър.

Pattern p = new Pattern(“Path of image”);

По-долу са най-често използваните методи на клас Pattern.

Начин на доставка Descriptйон Синтаксис
getFileName Връща името на файла, съдържащ се в обекта Pattern.

Шаблон p = нов шаблон (“D:\Demo\QA.png”);

Низ име на файл = p.getFileName();

подобен Този метод връща нов обект Pattern със сходство, зададено на определена стойност. Приема стойността на сходството между 0 до 1 като параметър. Sikuli търси всички елементи, които попадат в посочения диапазон на сходство, и връща нов обект на шаблон.

Модел p1 = p.similar(0.7f);

Точен Този метод връща нов обект на шаблон със сходство, зададено на 1. Той търси само точно съвпадение на посочения елемент.

Модел p1 = p.exact();

Code Пример за качване на файл с помощта на Sikuli

Кодът по-долу обяснява използването на Sikuli за качване на файлове в Chrome.

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) Първият израз включва задаване на пътя на изпълнимия файл на драйвера за chrome.

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

⚠️ Бележка към версията: Selenium 4 разрешава двоичния файл на драйвера чрез Selenium Мениджър, така че този ред вече е незадължителен. Той се запазва такъв, какъвто е написан от източника.

Стъпка 2) Използвайте инструмент за заснемане на екрана като Snipping Tool за правене на екранни снимки на изскачащ прозорец на Windows „FileTextBox„“ и бутон „Отвори“, както е показано по-долу.

Snipping Tool избор над Windows текстово поле за въвеждане на файл в изскачащия прозорец за качване

Ето как трябва да изглежда екранната ви снимка:

Заснет файлов текстBox и референтни изображения на OpenButton, използвани от скрипта Sikuli

Изображенията за текстовото поле за въвеждане на файл на Windows и бутона за отваряне се съхраняват върху „FileTextBox.PNG" и "OpenButton.PNG".

Пример: Ако искате да автоматизирате операцията по отваряне на бележник, тогава трябва да съхраните изображението на икона на работния плот за бележник в PNG файл и да извършите операция с щракване върху него.

В нашия случай, той разпознава текстовото поле за въвеждане на файл и бутона „Отвори“ на Windows изскачащ прозорец с помощта на съхранените изображения. Ако разделителната способност на екрана се промени от заснемане на изображение към изпълнение на тестов скрипт, поведението на Sikuli би било непоследователно. Следователно винаги е препоръчително да изпълнявате тестовия скрипт на същата разделителна способност, при която се заснемат изображенията. Промяната в размера на пикселите на изображенията ще доведе до Sikuli хвърляне на FindFailed изключение.

Стъпка 3) Следващите инструкции включват създаването на обекти за класове Screen и Pattern. Създайте нов екранен обект. Задайте пътя на файла, който искате да качите, като параметър към обекта Pattern.

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

Стъпка 4) Следните твърдения включват отваряне на браузъра Chrome с 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();

Продукция

Първоначално скриптът отваря браузъра chrome

Браузърът Chrome е отворен на страницата за качване на демонстрационни файлове в началото на изпълнението

Щракнете върху бутона „Избор на файл“, ще се появи изскачащ екран за файлове на Windows. Въвежда данни в текстовото поле за въвеждане на файл и щраква върху бутона „Отвори“.

Windows изскачащ прозорец с пътя до файла, въведен в текстовото поле „Въвеждане на файл“

Екранът по-долу се показва, след като качването на файла завърши и затвори браузъра

Демонстрационна страница, потвърждаваща завършването на качването, точно преди затварянето на браузъра

Тъй като съвпадението зависи от пикселите, пресъздавайте всяко референтно изображение при всеки редизайн на интерфейса. Тази крехкост е причината екипите да запазват Sikuli за изскачащи прозорци. обикновена обработка на файлове с WebDriver не може да достигне.

Въпроси и Отговори

Референтното изображение не съвпадаше на екрана. Обичайните причини са различна резолюция, преоразмерено изображение, преоформена тема или елементът все още не е видим. Заснемете отново с резолюция на изпълнение или по-ниска степен на сходство.

Selenium управлява DOM на браузъра чрез локатори. Sikuli управлява екрана чрез скрийншотове, така че достига до оригинални диалози, които DOM никога не показва. Двете се използват заедно.

Да. Декларирам com.sikulix:sikulixapi като зависимост и Maven използва същия API, keeping версията във файла за компилация, а не Eclipse изграждане на път.

Да, SikuliX работи по Windows, Linux и macOSРеферентните изображения не са преносими между тях, защото декорациите и шрифтовете се различават, така че всяка платформа се нуждае от свои собствени снимки.

Машинното обучение за съпоставяне толерира промени в цветовете, мащаба и темата, които сравнението на пиксели не може, и може да намери контрола по нейния етикет. Това намалява работата по повторно улавяне, необходима след редизайн.

Копилот на GitHub чернови Screen и Pattern извиквания и настройката на WebDriver около тях. Той не може да заснеме PNG файловете, така че проверете всеки генериран път на изображението.

Съвпадението прекъсва, когато интерфейсът се редизайнира или резолюцията се промени, работи по-бавно от DOM автоматизацията и докладва грешки по-неясно. Подходящо е за интерфейси, които се променят рядко.

Оригиналният изследователски проект Sikuli не е такъв, но е негов наследник SikuliX е и публикува артефакта sikulixapi, използван тук. Статии, цитиращи JAR файлове, написани на обикновен sikuli-script, описват по-ранния ред.

Обобщете тази публикация с: