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-plugin 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, имате нужда от основните понятия на JavaСценарий и, по-специално, JavaПрототип на обект на скрипт. Диаграмата по-долу показва двата прототипни обекта, към които се прикрепя потребителско разширение.

Диаграма на Selenium обекти prototype и PageBot prototype, използвани от потребителско разширение

За да създадете потребителското си разширение, пишете JavaМетоди на скрипта и ги добавете към Selenium прототипа на обекта и към прототипа на обекта PageBot.

Как Selenium IDE разпознава потребителско разширение

След добавяне на потребителско разширение към Selenium IDE и IDE е стартирана, всяка функция е регистрирана в тях JavaПрототипите на скриптовете са заредени и Selenium IDE разпознава всяка команда по нейното име. Ето защо префиксите за именуване в следващия раздел не са избор на стил — те са начинът, по който IDE класифицира вашата команда.

Как да създадете потребителско разширение

Стъпка 1) Действие – всички действия започват с doАко действието преобразува текста в главни букви, името му е doTextUpperCaseКогато добавите този метод за действие към Selenium IDE, самата IDE създава съответстващ метод за изчакване, така че doTextUpperCase също така произвежда функцията за изчакване текстГлавниСписъциИИзчакванеМетодът може да приема два параметъра.

Пример: действие с текст с главни букви

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Скрипт, така че всеки текстов редактор е достатъчен.

Как да използвате новосъздаденото основно разширение

Зареждането на файла е задача от четири стъпки в оригинала Firefox-плъгин IDE. Всяка екранна снимка по-долу съответства на номерираната стъпка до нея.

  1. Отиди Selenium IDE и щракнете Опции -> Опции…

    Selenium Менюто с опции на IDE е отворено, за да се стигне до диалоговия прозорец с опции

  2. в Общи раздел, изберете местоположението на новосъздадения Selenium Разширение на ядрото.

    Selenium Диалоговият прозорец с опции на IDE, раздел „Общи“ с Selenium Поле за път към файла с основни разширения

  3. Кликнете OK и рестартирайте Selenium SDI.

    Подкана за потвърждение, показвана когато 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 автоматизация
FlexMonkium За базиран на 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 няма еквивалентен hook, така че същата логика е написана като обикновен помощен метод във вашата тестова рамка.

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