Selenium Extensions principales (User-Extensions.js)

⚡ Résumé intelligent

Selenium Les extensions de base, également appelées extensions utilisateur, ajoutent des actions personnalisées, des accesseurs et des stratégies de localisation à Selenium IDE en attachant JavaLes fonctions du script sont liées à Selenium et les objets prototypes PageBot au démarrage de l'IDE.

  • (I.e. Trois piliers : Chaque commande Selenese est une action, un accesseur ou une assertion, ou une stratégie de localisation.
  • ☑️ Règles de dénomination : Les actions commencent par do, les accesseurs par get ou is, et les localisateurs par locateElementBy.
  • ✅ Commande d'attente libre : L'enregistrement de la fonction doTextUpperCase permet à l'IDE de générer automatiquement textUpperCaseAndWait.
  • 🧪 Mécanisme de chargement : L'IDE lit le fichier user-extensions.js au démarrage, il faut donc redémarrer l'outil après chaque modification.
  • ️ Statut hérité : Selenium Noyau et le Firefox-Le plugin IDE a été retiré, et Selenium 3. La prise en charge des extensions utilisateur a été supprimée des fichiers jar.
  • (I.e. Itinéraire moderne : L'IDE actuel pour les extensions de navigateur expose à la place un manifeste de plugin et une commande d'exécution de script.

Selenium Extensions principales et fichier user-extensions.js

Selenium Extensions principales

Pour comprendre les extensions, commençons par comprendre les trois piliers de Selenium IDEChaque commande que vous enregistrez ou saisissez dans l'IDE appartient à l'une des trois catégories ci-dessous, et chaque capture d'écran montre comment cette catégorie apparaît dans la liste des commandes de l'IDE.

  1. Action: Quelle opération effectuez-vous sur l'écran d'interface utilisateur ?

    Selenium Liste des commandes de l'IDE affichant les commandes d'action telles que cliquer et saisir du texte

  2. Accesseurs / Assertion : Quelles vérifications effectuez-vous sur les données obtenues via l'interface utilisateur ?

    Selenium Commandes d'accès et d'assertion de l'IDE préfixées par get, is, verify et assert

  3. Stratégie de localisation : Comment trouver l'élément dans l'interface utilisateur.

    Selenium L'IDE liste les stratégies de localisation de la zone cible telles que l'ID, le nom, le CSS et XPath.

Selenium L'IDE est livré avec une bibliothèque mature qui contient déjà de nombreuses actions, accesseurs et assertions, ainsi que des stratégies de localisation.

Cependant, il arrive qu'un projet nécessite des fonctionnalités absentes de la bibliothèque. Dans ce cas, vous pouvez l'étendre en ajoutant votre propre extension personnalisée. Ces extensions personnalisées sont appelées des extensions de bibliothèque. poste utilisateur.

Par exemple, supposons que vous ayez besoin d'une action qui convertit du texte en majuscules avant de l'insérer dans un élément web. Cette action n'existant pas dans la bibliothèque par défaut, vous devez créer votre propre extension utilisateur. Ce tutoriel vous apprendra à créer une telle extension.

⚠️ Avant de commencer : le flux de travail décrit ici appartient à Selenium Core et l'original Firefox-brancher Selenium IDE. Selenium Le noyau a été abandonné et la prise en charge des extensions utilisateur a été supprimée. Selenium bocaux dans Selenium 3. Les étapes et le code ci-dessous sont conservés car un grand nombre de suites Selenese héritées en dépendent encore ; le remplacement moderne est décrit plus loin dans cet article.

Exigence de créer un Selenium Extension utilisateur

Pour créer une extension utilisateur pour Selenium IDE, vous avez besoin des concepts de base de Javascénario et, en particulier, le JavaObjet prototype de script. Le diagramme ci-dessous illustre les deux objets prototypes auxquels une extension utilisateur s'associe.

Diagramme du Selenium Les objets prototype et PageBot prototype utilisés par une extension utilisateur

Pour créer votre extension utilisateur, vous écrivez JavaLes méthodes de script et les ajouter au Selenium prototype d'objet et prototype d'objet PageBot.

Comment Selenium L'IDE reconnaît une extension utilisateur

Après l'ajout d'une extension utilisateur à Selenium L'IDE est lancé, chaque fonction enregistrée sur ces JavaLes prototypes de script sont chargés, et Selenium L'IDE reconnaît chaque commande par son nom. C'est pourquoi les préfixes de nommage dans la section suivante ne relèvent pas d'un choix stylistique : ils servent à classer votre commande par l'IDE.

Comment créer une extension utilisateur

Étape 1) Action – toutes les actions commencent par doSi l'action convertit du texte en majuscules, son nom est doTextUpperCaseLorsque vous ajoutez cette méthode d'action à Selenium L'IDE, l'IDE lui-même, crée une méthode d'attente correspondante, donc doTextUpperCase produit également la fonction d'attente textUpperCaseAndWaitCette méthode peut accepter deux paramètres.

Exemple : Action de texte en majuscules

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

Étape 2) Accesseurs / Assertion – tous les accesseurs enregistrés sur le Selenium Les prototypes d'objets sont préfixés par obtenez or isPar exemple, `getValueFromCompoundTable` ou `isValueFromCompoundTable`. Un accesseur peut accepter deux paramètres : l’un pour la cible et l’autre pour le champ de valeur dans le cas de test. La capture d’écran ci-dessous montre comment ces préfixes apparaissent une fois l’extension chargée.

Selenium IDE affichant les commandes d'accès get et is générées à partir d'une extension utilisateur

Pour chaque accessoire, Selenium L'IDE génère les fonctions de vérification correspondantes préfixées par vérifier et affirmer, plus une fonction d'attente préfixée par attendre.

Exemple : Pour les accesseurs de texte en majuscules

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

Étape 3) Stratégie de localisation – si vous souhaitez créer votre propre fonction pour localiser un élément, étendez le prototype PageBot avec une fonction préfixée par localiserElementParElle prend deux paramètres : la chaîne de localisation et le document dans lequel l’élément doit être recherché.

Exemple : pour le localisateur de texte en majuscules

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

Enregistrez les trois fonctions dans un seul fichier nommé user-extensions.jsLe fichier est simple. JavaScript, donc n'importe quel éditeur de texte suffit.

Comment utiliser la nouvelle extension principale

Le chargement du fichier est une tâche en quatre étapes dans la version originale Firefox-plugin IDE. Chaque capture d'écran ci-dessous correspond à l'étape numérotée à côté.

  1. Allez dans Selenium IDE et cliquez Options -> Options…

    Selenium Le menu Options de l'IDE s'est ouvert pour accéder à la boîte de dialogue Options.

  2. Dans l' Généralités Dans cette section, sélectionnez l'emplacement de la nouvelle section créée. Selenium Extension principale.

    Selenium boîte de dialogue Options de l'IDE, onglet Général avec Selenium Champ de chemin d'accès aux fichiers des extensions principales

  3. Cliquez à nouveau OK et redémarrer Selenium IDE

    Message de confirmation affiché lorsque Selenium L'IDE est redémarré pour charger le fichier d'extension

  4. Vous trouverez l'extension dans la liste des commandes.

    Selenium Liste déroulante des commandes de l'IDE affichant la nouvelle commande textUpperCase de user-extensions.js

Selenium Extensions de base vs Selenium Extensions IDE

Ces deux termes sont utilisés indifféremment dans les documents plus anciens, mais ils décrivent des couches différentes, et cette distinction est importante lorsque vous décidez où placer la logique personnalisée.

Aspect Selenium Extension de base Selenium Extension IDE
Ce qu'il étend La bibliothèque de commandes Selenese utilisée pendant la lecture L'application IDE elle-même
Fichier chargé user-extensions.js Le fichier user-extensions-ide.js dans l'ancien IDE est un manifeste de plugin dans l'IDE actuel.
Utilisation typique Nouvelles actions, accesseurs et stratégies de localisation Nouveaux éléments de menu, panneaux, formats et comportement de l'enregistreur
Objets touchés Selenium.prototype et PageBot.prototype API d'éditeur et d'enregistreur IDE
Courses pendant Test d'exécution Création et enregistrement

En résumé, une extension Core modifie les capacités d'un test, tandis qu'une extension IDE modifie les capacités de l'outil.

Comment le moderne Selenium L'IDE remplace user-extensions.js

Le Firefox-brancher Selenium L'IDE a cessé de fonctionner lorsque Firefox Le développement a été migré vers l'architecture WebExtensions et l'IDE a été réécrit sous forme de Chrome. Firefox et l'extension pour navigateur Edge. Cette réécriture a supprimé le champ Options mentionné ci-dessus ; il n'est donc plus possible de faire référence à un fichier user-extensions.js. Deux alternatives compatibles offrent les mêmes fonctionnalités.

  • La commande d'exécution de script. Pour une seule fois JavaScript, ajoutez un exécuter le script or exécuter un script asynchrone Exécutez directement le test et stockez le résultat dans une variable. C'est ce qui se rapproche le plus d'une petite action personnalisée.
  • Un plugin. Pour les commandes réutilisables, créez une extension de navigateur qui enregistre un manifeste auprès de l'IDE. Ce manifeste déclare chaque nouvelle commande avec un identifiant, un nom, un type optionnel et une documentation ; il peut également déclarer de nouveaux localisateurs.

Le manifeste est enregistré en envoyant un message à l'extension IDE, comme indiqué dans la documentation officielle. Selenium Documentation du plugin 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 convention de nommage survit à la migration : une commande de plugin est toujours déclarée une seule fois, puis réutilisée dans chaque test, exactement comme l’était une extension Core.

Extensions et plugins populaires utilisés dans Selenium IDE

Les modules complémentaires ci-dessous étaient les plus utilisés dans l'ancien EDI. Plusieurs d'entre eux, comme le contrôle de flux et la capture d'écran en cas d'échec, sont désormais intégrés à l'EDI actuel ou disponibles sous forme de plugins maintenus.

Nom Interet
Favoris Pour marquer une suite de tests comme favorite et l'exécuter en un seul clic
Pilote flexible X Pour l'automatisation basée sur Flex
FlexMonkium Pour l'enregistrement et la lecture basés sur Adobe Flex vers les tests in Selenium IDE
Journalisation des fichiers Pour enregistrer les journaux dans un fichier
Le contrôle de flux Pour contrôler le flux d’exécution des tests
Mettre en surbrillance les éléments Pour mettre en évidence un champ web
Attente implicite Attendre un élément pendant une certaine durée
Capture d'écran en cas d'échec Prendre une capture d'écran en cas d'échec
Résultats de test Enregistrez le cas de test résultat d'une suite de tests en un clic

Le vieux SeleniumLa page de téléchargement HQ qui hébergeait ces fichiers n'existe plus. Les plugins actuels et l'IDE lui-même sont distribués depuis le site web. Selenium Site du projet IDE et depuis Chrome, Firefox et les boutiques d'extensions Edge.

Téléchargez le Selenium Extension principale utilisée dans ce didacticiel

FAQ

Le nom conventionnel est user-extensions.js, et les modules complémentaires au niveau de l'IDE utilisaient user-extensions-ide.js. L'ancien IDE permettait de spécifier n'importe quel chemin, le nom était donc une convention plutôt qu'une exigence stricte, mais conservez-le.ping Cela permet de repérer plus facilement les suites partagées.

Les fonctions prototypes sont en lecture seule pendant le chargement de l'IDE ; par conséquent, toute modification effectuée après le démarrage est ignorée. Enregistrez le fichier, fermez complètement l'IDE et rouvrez-le. JavaUne erreur de syntaxe dans le script empêche également le chargement silencieux de l'ensemble du fichier.

Ouvrez la console du navigateur et relancez l'IDE, puis vérifiez si une erreur d'analyse syntaxique apparaît dans le fichier. L'ajout d'une ligne `console.log` en début de fichier permet de confirmer son chargement avant de déboguer les fonctions individuellement.

Vous n'écrivez que la version préfixée par do. Selenium L'IDE génère automatiquement la variante AndWait, qui effectue la même opération puis attend la fin du chargement de la page. Utilisez la forme AndWait lorsque l'action déclenche une navigation.

Les modèles d'apprentissage automatique peuvent générer le code de base d'une nouvelle commande et suggérer une stratégie de localisation à partir d'un instantané de page. La réparation des localisateurs assistée par l'IA est également utile ici, car une fonction `locateElementBy` personnalisée est précisément le code qui cesse de fonctionner lorsque le balisage change.

Partiellement. Copilot reproduit le SeleniumLes modèles `.prototype` et `PageBot.prototype` sont fréquemment utilisés dans les anciens dépôts, mais ils peuvent créer des méthodes d'assistance inexistantes. Vérifiez chaque appel suggéré dans la documentation de référence des commandes Selenese avant de vous y fier.

Oui. Un fichier contenant uniquement une fonction `locateElementBy` sur `PageBot.prototype` est valide. La nouvelle stratégie devient alors disponible pour toutes les commandes existantes ; ainsi, `click`, `type` et `assert` peuvent toutes cibler des éléments grâce à elle.

Selenium RC a accepté un fichier d'extensions utilisateur via un commutateur serveur, mais RC et Selenium Les carottes ont été retirées dans Selenium 3. WebDriver ne possède pas de hook équivalent, la même logique est donc écrite comme une méthode d'assistance ordinaire dans votre framework de test.

Résumez cet article avec :