Сікулі Підручник для Selenium Автоматизація
⚡ Розумний підсумок
Sikuli автоматизує графічний інтерфейс, розпізнаючи збережені знімки екрана, а не локатори, що дозволяє Selenium тест-драйв Windows спливаючі вікна, діалогові вікна нативних файлів та об'єкти Flash, до яких WebDriver сам по собі не може отримати доступ.
У чому Сікулі 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. Проект 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' та кнопку 'Відкрити', як показано нижче.
Ось як має виглядати ваш скріншот:
Зображення для текстового поля введення файлу 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
Натисніть кнопку «Вибрати файл», з’явиться спливаюче вікно файлу Windows. Вводить дані в текстове поле «Введення файлу» та натискає кнопку «Відкрити».
Екран нижче відображається після завершення завантаження файлу та закриття браузера
Оскільки зіставлення залежить від пікселів, повторно захоплюйте кожне еталонне зображення щоразу, коли інтерфейс змінюється. Саме через цю крихкість команди резервують Sikuli для спливаючих вікон. проста обробка файлів WebDriver не може дістатися.






