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 :