Selenium Основні розширення (User-Extensions.js)

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

Selenium Основні розширення, які також називаються розширеннями користувачів, додають власні дії, засоби доступу та стратегії локатора до Selenium IDE шляхом підключення JavaФункції скрипта для Selenium та прототипи об'єктів PageBot під час запуску IDE.

  • 🔘 Три стовпи: Кожна команда Selenese є дією, методом доступу або твердженням, або стратегією локатора.
  • ☑️ Правила іменування: Дії починаються з do, аксессори з get або is, а локатори з locateElementBy.
  • ✅ Команда вільного очікування: Реєстрація doTextUpperCase змушує IDE автоматично генерувати textUpperCaseAndWait.
  • 🧪 Механізм навантаження: IDE зчитує user-extensions.js під час запуску, тому інструмент необхідно перезапускати після кожного редагування.
  • 🛠️ Застарілий статус: Selenium Ядро та Firefox-плагін IDE було виведено з експлуатації, та Selenium 3 видалили підтримку розширень користувача з jar-файлів.
  • 📊 Сучасний маршрут: Поточна IDE розширення браузера надає маніфест плагіна та команду виконання скрипта.

Selenium Основні розширення та файл user-extensions.js

Selenium Основні розширення

Щоб зрозуміти розширення, давайте спочатку зрозуміємо три основи Selenium IDEКожна команда, яку ви записуєте або вводите в IDE, належить до однієї з трьох категорій, наведених нижче, і кожен знімок екрана показує, як ця категорія відображається у списку команд IDE.

  1. дія: Яку операцію ви виконуєте на екрані інтерфейсу користувача.

    Selenium Список команд IDE, що містить команди дій, такі як клацання та введення

  2. Аксесори / Твердження: Яку перевірку ви виконуєте над даними, отриманими з інтерфейсу користувача.

    Selenium Команди доступу та асерції IDE з префіксами get, is, verify та assert

  3. Стратегія локатора: Як знайти елемент в інтерфейсі користувача.

    Selenium Стратегії пошуку цільового поля IDE, такі як id, name, css та xpath

Selenium IDE постачається зі зрілою бібліотекою, яка вже містить безліч дій, методів доступу та тверджень, а також стратегій локатора.

Однак іноді проєкту потрібна функціональність, якої немає в цій бібліотеці. У такому випадку ви можете розширити бібліотеку, додавши власне спеціальне розширення. Ці спеціалізовані розширення називаються розширення користувача.

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

⚠️ Перш ніж почати: описаний тут робочий процес належить Selenium Ядро та оригінал Firefox-підключати Selenium IDE. Selenium Ядро було вилучено з підтримки, а підтримку розширень для користувачів припинено. Selenium банки в Selenium 3. Наведені нижче кроки та код збережено, оскільки велика кількість застарілих пакетів Selenese все ще залежить від них; сучасна заміна описана далі в цій статті.

Вимога щодо створення Selenium Розширення користувача

Щоб створити розширення користувача для Selenium IDE, вам потрібні основні поняття JavaScript і, зокрема, JavaПрототип об'єкта скрипта. На діаграмі нижче показано два прототипи об'єктів, до яких приєднується розширення користувача.

Діаграма Selenium Об'єкти prototype та PageBot, що використовуються розширенням користувача

Щоб створити розширення користувача, ви пишете JavaМетоди скриптів та додайте їх до Selenium прототип об'єкта та прототип об'єкта PageBot.

Як Selenium IDE розпізнає розширення користувача

Після додавання розширення користувача до Selenium IDE та IDE запущено, кожна функція зареєстрована на цих JavaПрототипи скриптів завантажено, і Selenium IDE розпізнає кожну з них за її назвою. Саме тому префікси імен у наступному розділі не є вибором стилю — вони являють собою те, як IDE класифікує вашу команду.

Як створити розширення користувача

Крок 1) Дія – усі дії починаються з doЯкщо дія перетворює текст у верхній регістр, її назва буде doTextUpperCaseКоли ви додаєте цей метод дії до Selenium IDE, саме IDE створює відповідний метод очікування, тому doTextUpperCase також створює функцію очікування текстUpperCaseAndWaitМетод може приймати два параметри.

Приклад: дія з текстом у верхньому регістрі

Selenium.prototype.doTextUpperCase = function(locator, text) {
// Here findElement is itself capable to handle all type of locator(xpath,css,name,id,className), We just need to pass the locator text
var element = this.page().findElement(locator);

// Create the text to type
text = text.toUpperCase();

// Replace the element text with the new text
this.page().replaceText(element, text);
};

Крок 2) Аксесори / Твердження – усі користувачі доступу, зареєстровані на Selenium прототипи об'єкта мають префікс отримати or is, наприклад, getValueFromCompoundTable або isValueFromCompoundTable. Аксесор може приймати два параметри: один для цілі та один для поля значення в тестовому випадку. На скріншоті нижче показано, як ці префікси виглядають після завантаження розширення.

Selenium IDE, що показує команди доступу get та is, згенеровані з розширення користувача

Для кожного аксессора, Selenium IDE генерує відповідні функції перевірки з префіксом перевірити та стверджувати, а також функція очікування з префіксом чекати.

Приклад: Для методів доступу до тексту у верхньому регістрі

Selenium.prototype.assertTextUpperCase = function(locator, text) {
// All locator-strategies are automatically handled by "findElement"
var element = this.page().findElement(locator);

// Create the text to verify
text = text.toUpperCase();

// Get the actual element value
var actualValue = element.value;

// Make sure the actual value matches the expected
Assert.matches(expectedValue, actualValue);
};

Selenium.prototype.isTextEqual = function(locator, text) {
return this.getText(locator).value===text;
};

Selenium.prototype.getTextValue = function(locator, text) {
return this.getText(locator).value;
};

Крок 3) Стратегія локатора – якщо ви хочете створити власну функцію для пошуку елемента, розширте прототип PageBot функцією з префіксом locateElementByВін приймає два параметри: рядок локатора та документ, у якому слід шукати елемент.

Приклад: для пошуку тексту у верхньому регістрі

// The "inDocument" is a document you are searching.
PageBot.prototype.locateElementByUpperCase = function(text, inDocument) {
// Create the text to search for
var expectedValue = text.toUpperCase();

// Loop through all elements, looking for ones that have
// a value === our expected value
var allElements = inDocument.getElementsByTagName("*");
// This star '*' is a kind of regular expression it will go through every element (in HTML DOM every element surely have a tag name like<body>,<a>,<h1>,<table>,<tr>,<td> etc. ). Here our motive is to find an element which matched with the Upper Case text we have passed so we will search it with all elements and when we get match we will have the correct web element.
for (var i = 0; i < allElements.length; i++) {
var testElement = allElements[i];
if (testElement.innerHTML && testElement.innerHTML === expectedValue) {
return testElement;
}
}
return null;
};

Збережіть усі три функції в одному файлі з назвою user-extensions.jsФайл простий. JavaСкрипт, тому достатньо будь-якого текстового редактора.

Як використовувати новостворене розширення Core

Завантаження файлу в оригіналі складається з чотирьох кроків Firefox-плагін IDE. Кожен знімок екрана нижче відповідає пронумерованому кроку поруч із ним.

  1. Перейдіть до Selenium IDE та клацніть Параметри -> Параметри…

    Selenium Відкрито меню параметрів IDE для доступу до діалогового вікна параметрів

  2. Перейдіть на вкладку Загальне розділі виберіть розташування щойно створеного Selenium Розширення ядра.

    Selenium Діалогове вікно параметрів IDE, вкладка «Загальні» з Selenium Поле шляху до файлу основних розширень

  3. Натисніть OK та перезавантажте Selenium ІДЕ.

    Запит на підтвердження відображається, коли Selenium IDE перезавантажується для завантаження файлу розширення

  4. Ви знайдете розширення у списку команд.

    Selenium Випадаючий список команд IDE зі списком нової команди textUpperCase з user-extensions.js

Selenium Основні розширення проти Selenium Розширення IDE

Ці два терміни використовуються як взаємозамінні у старих матеріалах, але вони описують різні шари, і ця різниця має значення, коли ви вирішуєте, де розмістити власну логіку.

Аспект Selenium Розширення ядра Selenium Розширення IDE
Що це розширює Бібліотека команд Selenese, що використовується під час відтворення Сама IDE-програма
Файл завантажено user-extensions.js user-extensions-ide.js у застарілій IDE, маніфест плагіна в поточній IDE
Типове використання Нові дії, засоби доступу та стратегії локатора Нові елементи меню, панелі, формати та поведінка диктофона
Предмети, яких торкалися Selenium.prototype та PageBot.prototype API редактора та записуючого пристрою IDE
Виконується протягом Виконання тесту Авторство та запис

Коротше кажучи, розширення Core змінює можливості тесту, тоді як розширення IDE змінює можливості інструменту.

Як сучасний Selenium IDE замінює user-extensions.js

Команда Firefox-підключати Selenium IDE перестав працювати, коли Firefox перейшов на архітектуру WebExtensions, а IDE було переписано як Chrome, Firefox і розширення для браузера Edge. Це переписування видалило поле «Параметри», показане вище, тому немає місця для вказівки на файл user-extensions.js. Дві підтримувані альтернативи охоплюють ту саму тему.

  • Команда виконання скрипта. Для одноразового використання JavaСкрипт, додайте виконати скрипт or виконати асинхронний скрипт безпосередньо перейти до тесту та зберегти результат у змінній. Це найближчий еквівалент невеликої користувацької дії.
  • Плагін. Для команд повторного використання створіть розширення браузера, яке реєструє маніфест в IDE. Маніфест оголошує кожну нову команду з ідентифікатором, назвою, необов'язковим типом та документацією, а також може оголошувати нові локатори.

Маніфест реєструється шляхом надсилання повідомлення до розширення IDE, як показано в офіційному Selenium Документація плагіна IDE.

browser.runtime.sendMessage(SIDE_ID, {
uri: "/register",
verb: "post",
payload: {
name: "Selenium IDE plugin",
version: "1.0.0",
commands: [
{ id: "textUpperCase", name: "text upper case" }
]
}
}).catch(console.error);

Дисципліна іменування переживає міграцію: команда плагіна все ще оголошується один раз, а потім повторно використовується в кожному тесті, точно так само, як і розширення Core.

Популярні розширення та плагіни, що використовуються в Selenium IDE

Наведені нижче доповнення були найбільш широко використовуваними у застарілій IDE. Деякі з них, такі як керування потоком та створення знімків екрана у разі невдачі, тепер вбудовані в поточну IDE або доступні як підтримувані плагіни.

ІМ'Я Мета
Вибрані Позначити набір тестів як обраний та виконати його одним клацанням миші
Flex Pilot X Для автоматизації на основі Flex
ФлексМонкіум Для запису та відтворення на основі Adobe Flex Тестування in Selenium IDE
Журналування файлів Для збереження журналів у файлі
Управління потоком Для контролю потоку виконання тесту
Виділіть елементи Щоб виділити веб-елемент керування
Неявне очікування Чекати на елемент протягом певного часу
Знімок екрана при помилці Зробіть скріншот у разі невдачі
Результати тестування Зберегти тестовий випадок результат для набору тестів в один клік

Старий SeleniumСторінка завантаження HQ, на якій розміщувалися ці файли, більше не існує. Поточні плагіни та саме IDE розповсюджуються з Selenium Сайт проекту IDE і з Chrome, Firefox і магазини доповнень Edge.

Завантажити Selenium Основне розширення, яке використовується в цьому посібнику

Поширені запитання

Традиційна назва — user-extensions.js, а доповнення рівня IDE використовували user-extensions-ide.js. Застаріле IDE дозволяло вказувати на будь-який шлях, тому назва була радше умовністю, ніж жорсткою вимогою, але keeping це полегшує розпізнавання спільних люксів.

Функції прототипу доступні лише для читання під час завантаження IDE, тому редагування, внесене після запуску, ігнорується. Збережіть файл, повністю закрийте IDE та знову відкрийте його. JavaСинтаксична помилка скрипта також зупиняє непомітне завантаження всього файлу.

Відкрийте консоль браузера та перезапустіть IDE, потім перевірте наявність помилки синтаксичного аналізу файлу. Додавання рядка console.log на початку файлу підтверджує, чи він взагалі завантажився, перш ніж розпочати налагодження окремих функцій.

Ви пишете лише версію з префіксом do. Selenium IDE створює варіант AndWait, який виконує ту саму операцію, а потім очікує завершення завантаження сторінки. Використовуйте форму AndWait, коли дія запускає навігацію.

Моделі машинного навчання можуть створювати шаблон для нової команди та пропонувати стратегію локатора на основі знімка сторінки. Тут також корисним є відновлення локатора за допомогою штучного інтелекту, оскільки власна функція locateElementBy — це саме той код, який ламається при зміні розмітки.

Частково. Копілот відтворює SeleniumШаблони .prototype та PageBot.prototype, оскільки вони широко зустрічаються у старих репозиторіях, але вони можуть створювати допоміжні методи, яких ніколи не існувало. Перевірте кожен запропонований виклик на відповідність довіднику команд Selenese, перш ніж довіряти йому.

Так. Файл, що містить лише функцію locateElementBy на PageBot.prototype, є дійсним. Нова стратегія стає доступною для кожної існуючої команди, тому click, type та assert можуть використовувати всі цільові елементи через неї.

Selenium RC прийняв файл розширень користувача через комутатор сервера, але RC та Selenium Ядро було видалено в Selenium 3. WebDriver не має еквівалентного перехоплювача, тому та сама логіка записана як звичайний допоміжний метод у вашому тестовому фреймворку.

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