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-файлов.
  • 📊 Современный маршрут: Текущая среда разработки расширений для браузеров предоставляет вместо этого манифест плагина и команду выполнения скрипта.

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 запускается, и каждая зарегистрированная функция выполняется. JavaПрототипы скриптов загружены, и Selenium IDE распознает каждую команду по ее имени. Именно поэтому префиксы имен в следующем разделе — это не стилистический выбор, а способ классификации вашей команды IDE.

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

Шаг 1) Действие – все действия начинаются с doЕсли действие преобразует текст в верхний регистр, его название будет следующим: doTextUpperCaseКогда вы добавляете этот метод действия в Selenium IDE сама создает соответствующий метод ожидания, поэтому doTextUpperCase также создает функцию ожидания textUpperCaseAndWaitДанный метод может принимать два параметра.

Пример: действие с текстом в верхнем регистре

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 IDE.

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

  4. Расширение вы найдете в списке команд.

    Selenium В выпадающем списке команд IDE отображается новая команда textUpperCase из файла user-extensions.js.

Selenium Основные расширения против Selenium Расширения IDE

В более старых материалах эти два термина используются взаимозаменяемо, но они описывают разные уровни, и это различие имеет значение при принятии решения о том, куда разместить пользовательскую логику.

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

Короче говоря, расширение ядра изменяет возможности теста, а расширение IDE изменяет возможности инструмента.

Как современный Selenium IDE заменяет user-extensions.js

Firefox-плагин Selenium IDE перестала работать, когда Firefox Перешли на архитектуру WebExtensions, а IDE была переписана как Chrome. Firefox и расширение для браузера Edge. В результате этой переработки было удалено поле Options, показанное выше, поэтому нет места, где можно было бы указать на файл 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);

Принципы именования сохраняются и после миграции: команда плагина по-прежнему объявляется один раз и затем используется повторно во всех тестах, точно так же, как и расширение ядра.

Популярные расширения и плагины, используемые в Selenium IDE

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

Имя Цель
Избранное Чтобы отметить набор тестов как избранный и запустить его одним щелчком мыши.
Флекс Пилот X Для автоматизации на основе Flex
ФлексМонкиум Для записи и воспроизведения на основе Adobe Flex тестов in Selenium IDE
Ведение журнала файлов Для сохранения логов в файл
Управление потоком Для управления потоком выполнения теста
Выделить элементы Чтобы выделить веб-элемент управления
Неявное ожидание Ожидание элемента в течение определенного временного интервала
Снимок экрана при ошибке Сделать скриншот в случае неудачи
Результаты тестирования Сохранить прецедент результат для набора тестов в один клик

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

Скачать Selenium Базовое расширение, используемое в этом руководстве

Часто задаваемые вопросы (FAQ)

Традиционное название — user-extensions.js, и дополнения уровня IDE использовали user-extensions-ide.js. В устаревшей IDE можно было указывать любой путь, поэтому название было скорее условностью, чем жестким требованием, но...ping Это облегчает распознавание общих номеров.

Функции прототипа доступны только для чтения во время загрузки 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 нет эквивалентного хука, поэтому та же логика записывается как обычный вспомогательный метод в вашем тестовом фреймворке.

Подведем итог этой публикации следующим образом: