Сікулі Підручник для Selenium Автоматизація

⚡ Розумний підсумок

Sikuli автоматизує графічний інтерфейс, розпізнаючи збережені знімки екрана, а не локатори, що дозволяє Selenium тест-драйв Windows спливаючі вікна, діалогові вікна нативних файлів та об'єкти Flash, до яких WebDriver сам по собі не може отримати доступ.

  • 🔘 Основна ідея: Кожен елемент зберігається у форматі PNG, і Sikuli знаходить його, зіставляючи пікселі на екрані.
  • ☑️ Установка: Додати SikuliX JAR API до Java побудувати доріжку поруч Selenium JAR-файли.
  • Клас екрану: Надає можливості клацання, подвійного клацання, введення тексту, наведення курсора та пошуку, кожна з яких приймає назву зображення.
  • 🧪 Клас візерунка: Огортає шлях зображення та налаштовує відповідність за допомогою similar() та exact().
  • 🛠️ Приклад роботи: Тест Chrome натискає кнопку «Вибрати файл», потім Sikuli вводить шлях і натискає кнопку «Відкрити».
  • Обмеження: Зміна роздільної здатності або розміру в пікселях порушує зіставлення та викликає помилку FindFailed.

Сікулі Підручник для Selenium Автоматизація

У чому Сікулі Selenium?

Sikuli це інструмент автоматизації тестування на основі графічного інтерфейсу з відкритим кодом. Він в основному використовується для взаємодії з елементами веб-сторінок і обробки спливаючих вікон. Sikuli використовує техніку «розпізнавання зображень» і «графічний інтерфейс керування» для взаємодії з елементами веб-сторінок і вікон, що спливають. У Sikuli всі веб-елементи беруться як зображення та зберігаються всередині проекту.

⚠️ Примітка щодо назви: проєкт підтримується сьогодні як SikuliX, опубліковано на Maven Central як com.sikulix:sikulixapiНазви класів нижче залишаються незмінними.

Як використовувати Сікулі з 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-файл до шляху збірки разом із JAR-файлами Selenium, клацнувши правою кнопкою миші на проекті -> Шлях збірки -> Налаштувати шлях збірки, як показано нижче.

JAR-файл Sikuli додано до Java побудувати шлях у Eclipse Налаштувати шлях збірки

Після додавання JAR-файлу до шляху збірки проекту можна використовувати класи, що надаються Sikuli. Проект Maven може натомість оголосити той самий артефакт як залежність.

Екранний клас у Сікулях

Клас Screen є базовим класом для всіх методів, що надаються Sikuli. Клас Screen містить попередньо визначені методи для всіх поширених операцій з елементами екрана, таких як клацання, подвійне клацання, введення даних у текстове поле, наведення курсора тощо. Нижче наведено список поширених методів, що надаються класом Screen.

Метод Опис синтаксис
Натисніть Цей метод використовується для клацання елемента на екрані з використанням назви зображення як параметра.

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

s.click(“QA.png”);

doubleClick Цей метод використовується для подвійного клацання елемента. Він приймає назву зображення як параметр.

Екран 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”);

Нижче наведено найбільш часто використовувані методи класу Pattern.

Метод Опис синтаксис
getFileName Повертає ім’я файлу, що міститься в об’єкті Pattern.

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

String filename = 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 щоб зробити знімки екрана спливаючого вікна «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, описують попередній рядок.

Підсумуйте цей пост за допомогою: