Selenium Extensiones principales (User-Extensions.js)

⚡ Resumen inteligente

Selenium Las extensiones principales, también llamadas extensiones de usuario, agregan acciones personalizadas, accesores y estrategias de localización a Selenium IDE adjuntando JavaFunciones de script para el Selenium y los objetos prototipo de PageBot cuando se inicia el IDE.

  • 🔘 Tres pilares: Cada comando selenese es una acción, un accesor o una afirmación, o una estrategia de localización.
  • ☑️ Reglas de nombres: Las acciones comienzan con do, los accesores con get o is, y los localizadores con locateElementBy.
  • ✅ Comando de espera libre: Al registrar doTextUpperCase, el IDE genera automáticamente textUpperCaseAndWait.
  • 🧪 Mecanismo de carga: El IDE lee el archivo user-extensions.js al iniciarse, por lo que la herramienta debe reiniciarse después de cada edición.
  • 🛠️ Estado anterior: Selenium Núcleo y el Firefox-El IDE de complementos fue retirado y Selenium 3 eliminaron la compatibilidad con extensiones de usuario de los archivos JAR.
  • 📊 Ruta moderna: En su lugar, el IDE de extensión de navegador actual expone un manifiesto de complemento y un comando para ejecutar un script.

Selenium Extensiones principales y el archivo user-extensions.js

Selenium Extensiones principales

Para entender las extensiones, primero entendamos los tres pilares de Selenium IDECada comando que grabas o escribes en el IDE pertenece a una de las tres categorías que se muestran a continuación, y cada captura de pantalla muestra cómo aparece esa categoría en la lista de comandos del IDE.

  1. Acción: ¿Qué operación está realizando en la pantalla de la interfaz de usuario?

    Selenium Lista de comandos del IDE que muestra comandos de acción como clic y escribir.

  2. Accesores / Aserción: ¿Qué verificación realizas sobre los datos que obtienes de la interfaz de usuario?

    Selenium Comandos de acceso y aserción del IDE con prefijo get, is, verify y assert

  3. Estrategia de localización: Cómo encontrar el elemento en la interfaz de usuario.

    Selenium Estrategias de localización de la lista de cuadros de destino del IDE, como ID, nombre, CSS y XPath.

Selenium El IDE incluye una biblioteca consolidada que ya contiene gran cantidad de acciones, métodos de acceso, aserciones y estrategias de localización.

Sin embargo, a veces un proyecto necesita funcionalidad que no está en esa biblioteca. En esa situación, puede ampliar la biblioteca agregando su propia extensión personalizada. Estas extensiones personalizadas se llaman extensión de usuario.

Por ejemplo, supongamos que necesitas una acción que convierta el texto a mayúsculas antes de insertarlo en un elemento web. Esta acción no existe en la biblioteca predeterminada, por lo que creas tu propia extensión de usuario. En este tutorial aprenderás a crear una extensión de usuario que convierta texto a mayúsculas.

⚠️ Antes de empezar: El flujo de trabajo descrito aquí pertenece a Selenium Núcleo y el original Firefox-enchufar Selenium IDE. Selenium Core ha sido retirado y se eliminó el soporte para extensiones de usuario. Selenium frascos en Selenium 3. Los pasos y el código que se muestran a continuación se conservan porque un gran número de suites Selenese antiguas todavía dependen de ellos; la alternativa moderna se describe más adelante en este artículo.

Requisito para crear un Selenium Extensión de usuario

Para crear una extensión de usuario para Selenium IDE, necesitas los conceptos básicos de JavaScript y, en particular, el JavaObjeto prototipo de script. El siguiente diagrama muestra los dos objetos prototipo a los que se adjunta una extensión de usuario.

Diagrama de la Selenium Objetos prototipo y prototipo de PageBot utilizados por una extensión de usuario

Para crear tu extensión de usuario, escribe JavaMétodos de script y agréguelos al Selenium prototipo de objeto y al prototipo de objeto PageBot.

Cómo Selenium El IDE reconoce una extensión de usuario.

Después de que se agrega una extensión de usuario a Selenium IDE y el IDE se inicia, cada función registrada en esos JavaLos prototipos de script están cargados y Selenium El IDE reconoce cada uno por su nombre. Por eso, los prefijos de nomenclatura que aparecen en la siguiente sección no son una cuestión de estilo, sino la forma en que el IDE clasifica el comando.

Cómo crear una extensión de usuario

Paso 1) Acción – todas las acciones comienzan con do. Si la acción convierte el texto a mayúsculas, su nombre es doTextUpperCaseCuando agregas este método de acción a Selenium IDE, el propio IDE crea un método de espera coincidente, por lo que doTextUpperCase También produce la función de espera textoMayúsculasYEsperarEl método puede aceptar dos parámetros.

Ejemplo: acción de texto en mayúsculas

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);
};

Paso 2) Accesores / Aserción – todos los accesorios registrados en el Selenium Los prototipos de objetos están precedidos por get or isPor ejemplo, `getValueFromCompoundTable` o `isValueFromCompoundTable`. Un accesor puede aceptar dos parámetros: uno para el destino y otro para el campo de valor en el caso de prueba. La siguiente captura de pantalla muestra cómo aparecen estos prefijos una vez cargada la extensión.

Selenium IDE que muestra los comandos get e is accessor generados desde una extensión de usuario

Para cada accesorio, Selenium IDE genera las funciones de verificación correspondientes con el prefijo verificar y afirmar, más una función de espera precedida por esperarPor.

Ejemplo: Para los accesores de texto en mayúsculas

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;
};

Paso 3) Estrategia de localización – si desea crear su propia función para localizar un elemento, extienda el prototipo PageBot con una función prefijada por localizarElementoPor. Requiere dos parámetros: la cadena de localización y el documento en el que se debe buscar el elemento.

Ejemplo: para localizador de texto en mayúsculas

// 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;
};

Guarda las tres funciones en un único archivo llamado user-extensions.jsEl archivo es plano JavaEs un script, así que cualquier editor de texto sirve.

Cómo usar la extensión principal recién creada

Cargar el archivo es una tarea de cuatro pasos en el original. Firefox-plugin IDE. Cada captura de pantalla a continuación corresponde al paso numerado que aparece junto a ella.

  1. Vaya al Selenium IDE y haga clic Opciones -> Opciones…

    Selenium Se abrió el menú Opciones del IDE para acceder al cuadro de diálogo Opciones.

  2. En la sección General sección, seleccione la ubicación del recién creado Selenium Extensión del núcleo.

    Selenium Cuadro de diálogo Opciones del IDE Pestaña General con el Selenium Campo de ruta de archivo de extensiones principales

  3. Haga clic en OK y reiniciar Selenium IDE

    Se muestra un mensaje de confirmación cuando Selenium El IDE se reinicia para cargar el archivo de extensión.

  4. Encontrarás la extensión en la lista de comandos.

    Selenium Menú desplegable de comandos del IDE que muestra el nuevo comando textUpperCase de user-extensions.js

Selenium Extensiones principales vs. Selenium Extensiones del IDE

En materiales antiguos, ambos términos se utilizan indistintamente, pero describen capas diferentes, y la distinción es importante a la hora de decidir dónde colocar la lógica personalizada.

Aspecto Selenium Extensión del núcleo Selenium Extensión IDE
Lo que extiende La biblioteca de comandos selenese utilizada durante la reproducción La propia aplicación IDE
Archivo cargado user-extensions.js user-extensions-ide.js en el IDE heredado, un manifiesto de complemento en el IDE actual
Uso típico Nuevas acciones, accesores y estrategias de localización Nuevos elementos de menú, paneles, formatos y comportamiento de la grabadora.
Objetos tocados Selenium.prototype y PageBot.prototype API de editor y grabador IDE
Corre durante Ejecución de prueba Creación y grabación

En resumen, una extensión Core cambia lo que puede hacer una prueba, mientras que una extensión IDE cambia lo que puede hacer la herramienta.

Cómo el moderno Selenium El IDE reemplaza user-extensions.js

El Firefox-enchufar Selenium El IDE dejó de funcionar cuando Firefox se pasó a la arquitectura WebExtensions y el IDE se reescribió como Chrome, Firefox y la extensión del navegador Edge. Esa reescritura eliminó el campo Opciones que se muestra arriba, por lo que no hay dónde indicar la ubicación del archivo user-extensions.js. Dos alternativas compatibles cubren el mismo ámbito.

  • El comando de ejecución de script. Para una sola vez JavaScript, agregue un ejecutar script or ejecutar script asíncrono Acceda directamente a la prueba y guarde el resultado en una variable. Esto es lo más parecido a una pequeña acción personalizada.
  • Un complemento. Para comandos reutilizables, cree una extensión de navegador que registre un manifiesto en el IDE. El manifiesto declara cada nuevo comando con un ID, un nombre, un tipo opcional y documentación, y también puede declarar nuevos localizadores.

El manifiesto se registra enviando un mensaje a la extensión IDE, como se muestra en el documento oficial. Selenium Documentación del complemento 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);

La disciplina de nomenclatura se mantiene tras la migración: un comando de complemento se sigue declarando una sola vez y luego se reutiliza en todas las pruebas, exactamente como ocurría con una extensión de Core.

Extensiones y complementos populares utilizados en Selenium IDE

Los complementos que se muestran a continuación eran los más utilizados en el IDE anterior. Varios de ellos, como el control de flujo y la captura de pantalla en caso de fallo, ahora están integrados en el IDE actual o disponibles como complementos con soporte.

Nombre Propósito
Favoritos Para marcar un conjunto de pruebas como favorito y ejecutarlo con un solo clic
Piloto flexible X Para automatización basada en Flex
FlexMonkium Para grabación y reproducción basadas en Adobe Flex las pruebas in Selenium IDE
Registro de archivos Para guardar registros en un archivo
Control de flujo Para controlar el flujo de ejecución de la prueba
Elementos destacados Para resaltar un control web
Espera implícita Para esperar un elemento durante un tiempo determinado
Captura de pantalla en caso de error Tome una captura de pantalla en caso de falla
resultados de la prueba Guarde el caso de prueba resultado de un conjunto de pruebas en un solo clic

El viejo SeleniumLa página de descarga de HQ que alojaba estos archivos ya no existe. Los complementos actuales y el propio IDE se distribuyen desde Selenium Sitio del proyecto IDE y desde Chrome, Firefox y las tiendas de complementos de Edge.

Descargue nuestra Selenium Extensión principal utilizada en este tutorial

Preguntas Frecuentes

El nombre convencional es user-extensions.js, y los complementos a nivel de IDE usaban user-extensions-ide.js. El IDE heredado permitía apuntar a cualquier ruta, por lo que el nombre era una convención más que un requisito estricto, pero mantenerloping Esto facilita la identificación de las suites compartidas.

Las funciones de prototipo son de solo lectura mientras se carga el IDE, por lo que cualquier edición realizada después del inicio se ignora. Guarde el archivo, cierre el IDE por completo y vuelva a abrirlo. JavaUn error de sintaxis en el script también impide que el archivo completo se cargue silenciosamente.

Abre la consola del navegador y reinicia el IDE; luego, observa si aparece algún error de análisis en el archivo. Agregar una línea `console.log` al principio del archivo confirma si se cargó correctamente antes de comenzar a depurar las funciones individualmente.

Solo debes escribir la versión con el prefijo "do". Selenium El IDE genera automáticamente la variante AndWait, que realiza la misma operación y luego espera a que la página termine de cargarse. Utilice la forma AndWait cuando la acción active la navegación.

Los modelos de aprendizaje automático pueden generar el código base para un nuevo comando y sugerir una estrategia de localización a partir de una captura de pantalla de la página. La reparación de localizadores asistida por IA también resulta útil en este caso, ya que una función personalizada `locateElementBy` es precisamente el código que falla cuando cambia el marcado.

Parcialmente. El copiloto reproduce el SeleniumLos patrones .prototype y PageBot.prototype son comunes en repositorios antiguos, pero pueden generar métodos auxiliares que nunca existieron. Antes de confiar en cada llamada sugerida, compruébela con la referencia de comandos de Selenese.

Sí. Un archivo que contenga únicamente la función locateElementBy en PageBot.prototype es válido. La nueva estrategia estará disponible para todos los comandos existentes, por lo que click, type y assert podrán seleccionar elementos mediante ella.

Selenium RC aceptó un archivo de extensiones de usuario a través de un conmutador de servidor, pero RC y Selenium El núcleo fue retirado en Selenium 3. WebDriver no tiene un gancho equivalente, por lo que la misma lógica se escribe como un método auxiliar ordinario en su marco de pruebas.

Resumir este post con: