Selenium Estensioni principali (User-Extensions.js)

โšก Riepilogo intelligente

Selenium Le estensioni principali, chiamate anche estensioni utente, aggiungono azioni personalizzate, metodi di accesso e strategie di localizzazione a Selenium IDE allegando JavaFunzioni di script per il Selenium e oggetti prototipo di PageBot all'avvio dell'IDE.

  • ๐Ÿ”˜ Tre pilastri: Ogni comando Selenese รจ un'azione, un accessor o un'asserzione, oppure una strategia di localizzazione.
  • โ˜‘๏ธ Regole di denominazione: Le azioni iniziano con do, gli accessi con get o is, e i localizzatori con locateElementBy.
  • โœ… Comando di attesa libera: Registrando doTextUpperCase, l'IDE genera automaticamente textUpperCaseAndWait.
  • ๐Ÿงช Meccanismo di carico: L'IDE legge il file user-extensions.js all'avvio, quindi รจ necessario riavviare lo strumento dopo ogni modifica.
  • ๏ธ Stato precedente: Selenium Nucleo e il Firefox-i plugin IDE sono stati ritirati e Selenium 3 hanno rimosso il supporto per le estensioni utente dai file jar.
  • ๐Ÿ“Š Percorso moderno: L'IDE attuale per le estensioni del browser espone un manifesto del plugin e un comando per eseguire lo script.

Selenium Estensioni principali e il file user-extensions.js

Selenium Estensioni principali

Per comprendere le estensioni, cerchiamo innanzitutto di comprendere i tre pilastri di Selenium IDEOgni comando che registri o digiti nell'IDE appartiene a una delle tre categorie seguenti, e ogni schermata mostra come appare tale categoria nell'elenco dei comandi dell'IDE.

  1. Azione: Quale operazione stai eseguendo sulla schermata dell'interfaccia utente?

    Selenium Elenco dei comandi IDE che mostra i comandi di azione come clic e digitazione

  2. Accessori / Asserzione: Quali verifiche effettuate sui dati ricevuti dall'interfaccia utente?

    Selenium Comandi di accesso e asserzione dell'IDE con prefisso get, is, verify e assert

  3. Strategia di localizzazione: Come trovare l'elemento nell'interfaccia utente.

    Selenium Strategie di localizzazione per l'elenco delle caselle di destinazione dell'IDE, come ID, nome, CSS e XPath.

Selenium L'IDE viene fornito con una libreria matura che contiene giร  numerose azioni, metodi di accesso, asserzioni e strategie di localizzazione.

A volte, tuttavia, un progetto necessita di funzionalitร  non presenti in quella libreria. In tal caso, รจ possibile espandere la libreria aggiungendo una propria estensione personalizzata. Queste estensioni personalizzate sono chiamate interno utente.

Ad esempio, supponiamo di aver bisogno di un'azione che converta il testo in maiuscolo prima di inserirlo in un elemento web. Poichรฉ tale azione non รจ presente nella libreria predefinita, รจ necessario creare un'estensione utente personalizzata. In questo tutorial imparerai come creare un'estensione utente che converte il testo in maiuscolo.

โš ๏ธ Prima di iniziare: il flusso di lavoro qui descritto appartiene a Selenium Nucleo e l'originale Firefox-collegare Selenium IDE. Selenium Core รจ stato ritirato e il supporto per le estensioni utente รจ stato rimosso da Selenium barattoli in Selenium 3. I passaggi e il codice seguenti sono stati mantenuti perchรฉ un gran numero di suite Selenese obsolete ne dipendono ancora; la soluzione moderna sostitutiva รจ descritta piรน avanti in questo articolo.

Requisito per creare un Selenium Estensione utente

Per creare un'estensione utente per Selenium IDE, hai bisogno dei concetti di base di JavaCopione e, in particolare, il JavaOggetto prototipo dello script. Il diagramma seguente mostra i due oggetti prototipo a cui si collega un'estensione utente.

Diagramma del Selenium prototipo e oggetti prototipo PageBot utilizzati da un'estensione utente

Per creare la tua estensione utente, scrivi JavaMetodi di scripting e aggiungili al Selenium prototipo dell'oggetto e al prototipo dell'oggetto PageBot.

Come Selenium L'IDE riconosce un'estensione utente

Dopo che un'estensione utente รจ stata aggiunta a Selenium IDE e l'IDE รจ avviato, ogni funzione registrata su quelle JavaLo script prototipi รจ caricato e Selenium L'IDE riconosce ciascun comando tramite il suo nome. Ecco perchรฉ i prefissi di denominazione nella sezione successiva non sono una scelta di stile, ma il modo in cui l'IDE classifica il comando.

Come creare un'estensione utente

Passaggio 1) Azione โ€“ tutte le azioni iniziano con doSe l'azione converte il testo in maiuscolo, il suo nome รจ doTextUpperCase. Quando aggiungi questo metodo di azione a Selenium IDE, l'IDE stesso crea un metodo di attesa corrispondente, quindi doTextUpperCase produce anche la funzione di attesa testoMaiuscoloEAttendiIl metodo puรฒ accettare due parametri.

Esempio: Azione con testo in maiuscolo

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

Passaggio 2) Accessori / Asserzione โ€“ tutti gli utenti registrati sul Selenium Il prototipo dell'oggetto รจ preceduto da ottenere or isAd esempio, getValueFromCompoundTable o isValueFromCompoundTable. Un accessor puรฒ accettare due parametri, uno per la destinazione e uno per il campo valore nel caso di test. Lo screenshot seguente mostra come appaiono questi prefissi una volta caricata l'estensione.

Selenium IDE che mostra i comandi di accesso get e is generati da un'estensione utente

Per ogni accessor, Selenium L'IDE genera le corrispondenti funzioni di verifica precedute da verificare and affermare, piรน una funzione di attesa preceduta da attendere.

Esempio: per gli accessori di testo in maiuscolo

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

Fase 3) Strategia di localizzazione โ€“ se vuoi creare la tua funzione per individuare un elemento, estendi il prototipo PageBot con una funzione preceduta da localizzareElementoPerRichiede due parametri: la stringa di localizzazione e il documento in cui cercare l'elemento.

Esempio: per il localizzatore di testo in maiuscolo

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

Salva tutte e tre le funzioni in un unico file denominato user-extensions.jsIl file รจ semplice JavaSi tratta di uno script, quindi qualsiasi editor di testo รจ sufficiente.

Come utilizzare la nuova estensione Core

Il caricamento del file รจ un'operazione in quattro fasi nell'originale Firefox-plugin IDE. Ogni schermata qui sotto corrisponde al passaggio numerato accanto.

  1. Vai su Selenium IDE e fai clic Opzioni -> Opzioniโ€ฆ

    Selenium Il menu Opzioni IDE si รจ aperto per accedere alla finestra di dialogo Opzioni.

  2. Nel General sezione, selezionare la posizione del appena creato Selenium Estensione del nucleo.

    Selenium Finestra di dialogo Opzioni IDE, scheda Generale con Selenium Campo percorso file estensioni principali

  3. Clicchi OK e riavvia Selenium SDI.

    Viene visualizzato un messaggio di conferma quando Selenium L'IDE viene riavviato per caricare il file di estensione

  4. Troverai l'estensione nell'elenco dei comandi.

    Selenium Elenco a discesa dei comandi IDE che mostra il nuovo comando textUpperCase da user-extensions.js

Selenium Estensioni principali vs Selenium Estensioni IDE

Nei materiali piรน datati i due termini vengono usati in modo intercambiabile, ma descrivono livelli diversi, e la distinzione รจ importante quando si decide dove inserire la logica personalizzata.

Aspetto Selenium Estensione principale Selenium estensione IDE
Ciรฒ che estende La libreria di comandi Selenese utilizzata durante la riproduzione L'applicazione IDE stessa
File caricato user-extensions.js user-extensions-ide.js nell'IDE legacy, un manifesto del plugin nell'IDE corrente
Utilizzo tipico Nuove azioni, accessor e strategie di localizzazione Nuove voci di menu, pannelli, formati e comportamento del registratore
Oggetti toccati Selenium.prototipo e PageBot.prototipo API dell'editor e del registratore IDE
Corse durante Esecuzione del test Creazione e registrazione

In breve, un'estensione Core modifica le funzionalitร  di un test, mentre un'estensione IDE modifica le funzionalitร  dello strumento.

Come il moderno Selenium L'IDE sostituisce user-extensions.js

Migliori Firefox-collegare Selenium L'IDE ha smesso di funzionare quando Firefox รจ passato all'architettura WebExtensions e l'IDE รจ stato riscritto come Chrome, Firefox e l'estensione per il browser Edge. Tale riscrittura ha rimosso il campo Opzioni mostrato sopra, quindi non c'รจ modo di indicare un file user-extensions.js. Due alternative supportate coprono lo stesso ambito.

  • Il comando di esecuzione dello script. Per una sola volta JavaScript, aggiungi un script eseguito or esegui script asincrono Esegui direttamente il test e memorizza il risultato in una variabile. Questa รจ la soluzione piรน simile a una piccola azione personalizzata.
  • Un plugin. Per i comandi riutilizzabili, crea un'estensione del browser che registri un manifesto con l'IDE. Il manifesto dichiara ogni nuovo comando con un ID, un nome, un tipo opzionale e la documentazione, e puรฒ anche dichiarare nuovi localizzatori.

Il manifesto viene registrato inviando un messaggio all'estensione IDE, come mostrato nell'ufficiale Selenium documentazione del 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 convenzione di denominazione sopravvive alla migrazione: un comando plugin viene ancora dichiarato una sola volta e poi riutilizzato in ogni test, esattamente come avveniva per un'estensione Core.

Estensioni e plug-in popolari utilizzati in Selenium IDE

I componenti aggiuntivi elencati di seguito erano i piรน utilizzati nella versione precedente dell'IDE. Molti di essi, come il controllo del flusso e la funzionalitร  di acquisizione schermata in caso di errore, sono ora integrati nell'IDE attuale o disponibili come plugin mantenuti.

Nome Missione
Preferiti Per contrassegnare una suite di test come preferita ed eseguirla con un solo clic
FlexPilot X Per l'automazione basata su Flex
FlexMonkium Per la registrazione e la riproduzione basate su Adobe Flex analisi in Selenium IDE
Registrazione dei file Per salvare i log in un file
Il controllo del flusso Per controllare il flusso di esecuzione del test
Evidenzia elementi Per evidenziare un controllo Web
Attesa implicita Attendere un elemento per un determinato limite di tempo
Screenshot in caso di errore Fai uno screenshot in caso di fallimento
Risultati del test Salvare l' caso di prova risultato per una suite di test in un clic

Il vecchio SeleniumLa pagina di download HQ che ospitava questi file non esiste piรน. I plugin attuali e l'IDE stesso sono distribuiti da Selenium Sito del progetto IDE e da Chrome, Firefox e i negozi di componenti aggiuntivi di Edge.

Scarica la Selenium Estensione Core utilizzata in questo tutorial

DOMANDE FREQUENTI

Il nome convenzionale รจ user-extensions.js e i componenti aggiuntivi a livello di IDE utilizzavano user-extensions-ide.js. L'IDE precedente permetteva di specificare qualsiasi percorso, quindi il nome era una convenzione piuttosto che un requisito rigido, ma mantenevaping Rende piรน facile riconoscere le suite condivise.

Le funzioni prototipo sono di sola lettura durante il caricamento dell'IDE, quindi una modifica apportata dopo l'avvio viene ignorata. Salva il file, chiudi completamente l'IDE e riaprilo. JavaUn errore di sintassi dello script impedisce anche il caricamento silenzioso dell'intero file.

Apri la console del browser e riavvia l'IDE, quindi verifica la presenza di un errore di analisi nel file. L'aggiunta di una riga `console.log` all'inizio del file ti permette di confermare se รจ stato caricato correttamente prima di iniziare il debug delle singole funzioni.

Si scrive solo la versione con il prefisso "do". Selenium L'IDE deriva automaticamente la variante AndWait, che esegue la stessa operazione e poi attende il completamento del caricamento della pagina. Utilizza la forma AndWait quando l'azione attiva la navigazione.

I modelli di apprendimento automatico possono generare il codice standard per un nuovo comando e suggerire una strategia di localizzazione a partire da un'istantanea della pagina. Anche la riparazione della localizzazione assistita dall'IA รจ utile in questo caso, perchรฉ una funzione locateElementBy personalizzata รจ esattamente il codice che si interrompe quando il markup cambia.

Parzialmente. Il copilota riproduce il SeleniumI pattern .prototype e PageBot.prototype sono diffusi nei repository meno recenti, ma potrebbero inventare metodi di supporto inesistenti. Prima di fidarti di ogni chiamata suggerita, verificala nella documentazione di riferimento dei comandi di Selenese.

Sรฌ. Un file contenente solo una funzione locateElementBy su PageBot.prototype รจ valido. La nuova strategia diventa quindi disponibile per ogni comando esistente, quindi click, type e assert possono tutti selezionare elementi tramite essa.

Selenium RC ha accettato un file di estensione utente tramite uno switch server, ma RC e Selenium I nuclei sono stati rimossi in Selenium 3. WebDriver non dispone di un hook equivalente, quindi la stessa logica viene implementata come un normale metodo helper nel framework di test.

Riassumi questo post con: