Selenium Kernerweiterungen (User-Extensions.js)

โšก Intelligente Zusammenfassung

Selenium Kernerweiterungen, auch Benutzererweiterungen genannt, fรผgen benutzerdefinierte Aktionen, Zugriffsmethoden und Suchstrategien hinzu. Selenium IDE durch Anhรคngen JavaSkriptfunktionen fรผr die Selenium und PageBot-Prototypobjekte beim Start der IDE.

  • ๐Ÿ”˜ Drei Sรคulen: Jeder Selenese-Befehl ist eine Aktion, ein Zugriffsoperator oder eine Behauptung oder eine Lokalisierungsstrategie.
  • โ˜‘๏ธ Namensregeln: Aktionen beginnen mit โ€ždoโ€œ, Zugriffsmethoden mit โ€žgetโ€œ oder โ€žisโ€œ und Lokalisierungen mit โ€žlocateElementByโ€œ.
  • โœ… Freier Wartebefehl: Durch die Registrierung von doTextUpperCase generiert die IDE automatisch textUpperCaseAndWait.
  • ๐Ÿงช Lastmechanismus: Die IDE liest user-extensions.js beim Start ein, daher muss das Tool nach jeder Bearbeitung neu gestartet werden.
  • ๏ธ Legacy-Status: Selenium Kern und die Firefox-plugin IDE wurden eingestellt, und Selenium 3. Die Unterstรผtzung fรผr Benutzererweiterungen wurde aus den JAR-Dateien entfernt.
  • ๐Ÿ“Š Moderne Route: Die aktuelle Browser-Erweiterungs-IDE stellt stattdessen ein Plugin-Manifest und einen Befehl zum Ausfรผhren eines Skripts bereit.

Selenium Kernerweiterungen und die Datei user-extensions.js

Selenium Kernerweiterungen

Um Erweiterungen zu verstehen, wollen wir zunรคchst die drei Sรคulen verstehen. Selenium IDEJeder Befehl, den Sie in der IDE aufzeichnen oder eingeben, gehรถrt zu einer der drei unten aufgefรผhrten Kategorien, und jeder Screenshot zeigt, wie diese Kategorie in der Befehlsliste der IDE dargestellt wird.

  1. Aktion: Welche Operation fรผhren Sie auf dem Benutzeroberflรคchenbildschirm aus?

    Selenium IDE-Befehlsliste mit Aktionsbefehlen wie Klicken und Tippen

  2. Zugriffsmethoden / Behauptung: Welche รœberprรผfung fรผhren Sie an den Daten durch, die Sie รผber die Benutzeroberflรคche erhalten?

    Selenium IDE-Zugriffs- und Assertionsbefehle mit den Prรคfixen get, is, verify und assert

  3. Standortstrategie: So finden Sie das Element in der Benutzeroberflรคche.

    Selenium IDE-Zielbox-Locator-Strategien wie ID, Name, CSS und XPath

Selenium Die IDE wird mit einer ausgereiften Bibliothek ausgeliefert, die bereits zahlreiche Aktionen, Zugriffsmethoden und Zusicherungen sowie Locator-Strategien enthรคlt.

Manchmal benรถtigt ein Projekt jedoch Funktionen, die in dieser Bibliothek nicht enthalten sind. In diesem Fall kรถnnen Sie die Bibliothek durch Hinzufรผgen einer eigenen benutzerdefinierten Erweiterung erweitern. Diese benutzerdefinierten Erweiterungen werden als Erweiterungen bezeichnet. Benutzererweiterung.

Angenommen, Sie benรถtigen eine Aktion, die Text in GroรŸbuchstaben umwandelt, bevor er in ein Web-Element eingefรผgt wird. Da eine solche Aktion in der Standardbibliothek nicht vorhanden ist, erstellen Sie eine eigene Benutzererweiterung. In diesem Tutorial erfahren Sie, wie Sie eine solche Benutzererweiterung entwickeln.

โš ๏ธ Bevor Sie beginnen: Der hier beschriebene Arbeitsablauf gehรถrt zu Selenium Core und das Original Firefox-Plugin Selenium IDE. Selenium Die Core-Version wurde eingestellt, und die Unterstรผtzung fรผr Benutzererweiterungen wurde entfernt. Selenium Glรคser in Selenium 3. Die folgenden Schritte und der Code werden beibehalten, da eine groรŸe Anzahl รคlterer Selenese-Suites noch immer darauf angewiesen ist; der moderne Ersatz wird spรคter in diesem Artikel beschrieben.

Anforderung zur Erstellung eines Selenium Benutzererweiterung

Um eine Benutzererweiterung zu erstellen fรผr Selenium IDE, Sie benรถtigen die grundlegenden Konzepte von JavaSkript und insbesondere die JavaSkript-Prototypobjekt. Das folgende Diagramm zeigt die beiden Prototypobjekte, an die sich eine Benutzererweiterung anhรคngt.

Diagramm des Selenium Prototyp- und PageBot-Prototypobjekte, die von einer Benutzererweiterung verwendet werden

Um Ihre Benutzererweiterung zu erstellen, schreiben Sie JavaSkriptmethoden und fรผgen Sie sie dem hinzu Selenium Objektprototyp und zum PageBot-Objektprototyp.

Wie Selenium Die IDE erkennt eine Benutzererweiterung

Nachdem eine Benutzererweiterung hinzugefรผgt wurde Selenium IDE und die IDE wird gestartet, jede Funktion ist auf diesen registriert JavaSkriptprototypen werden geladen, und Selenium Die IDE erkennt jeden Befehl an seinem Namen. Daher sind die Namensprรคfixe im nรคchsten Abschnitt keine Stilfrage โ€“ sie dienen lediglich der Klassifizierung Ihres Befehls durch die IDE.

So erstellen Sie eine Benutzererweiterung

Schritt 1) โ€‹โ€‹Aktion โ€“ alle Aktionen beginnen mit doWenn die Aktion Text in GroรŸbuchstaben umwandelt, lautet ihr Name: doTextUpperCaseWenn Sie diese Aktionsmethode hinzufรผgen zu Selenium Die IDE selbst erstellt eine passende Wartemethode, daher doTextUpperCase erzeugt auch die Wartefunktion textUpperCaseAndWaitDie Methode kann zwei Parameter akzeptieren.

Beispiel: Textaktion in GroรŸbuchstaben

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

Schritt 2) Zugriffsmethoden / Assertion โ€“ alle auf der Selenium Objektprototypen werden mit einem Prรคfix versehen bekommen or isBeispielsweise `getValueFromCompoundTable` oder `isValueFromCompoundTable`. Ein Accessor kann zwei Parameter akzeptieren: einen fรผr das Ziel und einen fรผr das Wertfeld im Testfall. Der folgende Screenshot zeigt, wie diese Prรคfixe nach dem Laden der Erweiterung aussehen.

Selenium IDE zeigt die von einer Benutzererweiterung generierten Getter- und Is-Zugriffsbefehle an.

Fรผr jeden Accessor Selenium Die IDE generiert die entsprechenden Verifizierungsfunktionen mit dem Prรคfix รผberprรผfen und behaupten, plus eine Wartefunktion mit dem Prรคfix warteAuf.

Beispiel: Zugriffsmethoden fรผr GroรŸbuchstaben

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

Schritt 3) Locator-Strategie โ€“ Wenn Sie eine eigene Funktion zum Auffinden eines Elements erstellen mรถchten, erweitern Sie den PageBot-Prototyp um eine Funktion mit dem Prรคfix locateElementByEs benรถtigt zwei Parameter: die Locatorzeichenfolge und das Dokument, in dem das Element gesucht werden soll.

Beispiel: Fรผr den Text-Locator in GroรŸbuchstaben

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

Speichern Sie alle drei Funktionen in einer einzigen Datei mit dem Namen user-extensions.jsDie Datei ist im Klartextformat. JavaDa es sich um ein Skript handelt, genรผgt jeder Texteditor.

So verwenden Sie die neu erstellte Core-Erweiterung

Das Laden der Datei ist im Original ein vierstufiger Vorgang. Firefox-Plugin-IDE. Jeder der folgenden Screenshots entspricht dem daneben nummerierten Schritt.

  1. Zurรผck Nach Selenium IDE und klicken Optionen -> Optionenโ€ฆ

    Selenium Das IDE-Optionsmenรผ wurde geรถffnet, um zum Optionsdialog zu gelangen.

  2. Im Allgemein Im Abschnitt โ€žSpeicherort des neu erstelltenโ€œ Selenium Kernerweiterung.

    Selenium IDE-Optionen-Dialog, Registerkarte โ€žAllgemeinโ€œ mit dem Selenium Feld fรผr den Dateipfad der Core-Erweiterungen

  3. Klicken Sie auf OK und neu starten Selenium IDE.

    Bestรคtigungsaufforderung wird angezeigt, wenn Selenium Die IDE wird neu gestartet, um die Erweiterungsdatei zu laden.

  4. Die Erweiterung finden Sie in der Befehlsliste.

    Selenium IDE-Befehlsauswahlmenรผ mit dem neuen Befehl textUpperCase aus user-extensions.js

Selenium Core Extensions vs Selenium IDE-Erweiterungen

Die beiden Begriffe werden in รคlteren Materialien synonym verwendet, beschreiben aber unterschiedliche Ebenen, und die Unterscheidung ist wichtig, wenn Sie entscheiden, wo Sie benutzerdefinierte Logik platzieren.

Aspekt Selenium Core-Erweiterung Selenium IDE-Erweiterung
Was es erweitert Die wรคhrend der Wiedergabe verwendete Selenese-Befehlsbibliothek Die IDE-Anwendung selbst
Datei geladen user-extensions.js user-extensions-ide.js in der alten IDE, ein Plugin-Manifest in der aktuellen IDE
Typische Verwendung Neue Aktionen, Zubehรถr und Lokalisierungsstrategien Neue Menรผpunkte, Bedienfelder, Formate und Recorderverhalten
Berรผhrte Gegenstรคnde Selenium.prototype und PageBot.prototype IDE-Editor- und Recorder-APIs
Lรคuft wรคhrend Testausfรผhrung Erstellung und Aufzeichnung

Kurz gesagt, eine Core-Erweiterung verรคndert, was ein Test leisten kann, wรคhrend eine IDE-Erweiterung verรคndert, was das Tool leisten kann.

Wie die Moderne Selenium Die IDE ersetzt user-extensions.js

Das Firefox-Plugin Selenium Die IDE funktionierte nicht mehr, als Firefox Umstellung auf die WebExtensions-Architektur und die IDE wurde als Chrome neu geschrieben. Firefox und der Edge-Browsererweiterung. Durch diese รœberarbeitung wurde das oben gezeigte Optionsfeld entfernt, sodass keine Mรถglichkeit mehr besteht, auf eine user-extensions.js-Datei zu verweisen. Zwei unterstรผtzte Alternativen decken denselben Bereich ab.

  • Der Befehl zum Ausfรผhren des Skripts. Fรผr einmalige Zwecke JavaSkript, fรผgen Sie ein Skript ausfรผhren or Fรผhre asynchrones Skript aus Fรผhre den Test direkt aus und speichere das Ergebnis in einer Variablen. Dies entspricht am ehesten einer kleinen benutzerdefinierten Aktion.
  • Ein Plugin. Fรผr wiederverwendbare Befehle erstellen Sie eine Browsererweiterung, die ein Manifest in der IDE registriert. Das Manifest deklariert jeden neuen Befehl mit einer ID, einem Namen, einem optionalen Typ und einer Dokumentation und kann auch neue Locators deklarieren.

Das Manifest wird registriert, indem eine Nachricht an die IDE-Erweiterung gesendet wird, wie in der offiziellen Dokumentation gezeigt. Selenium IDE-Plugin-Dokumentation.

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

Die Namenskonvention bleibt auch nach der Migration erhalten: Ein Plugin-Befehl wird weiterhin nur einmal deklariert und dann in jedem Test wiederverwendet, genau wie es bei einer Core-Erweiterung der Fall war.

Beliebte Erweiterungen und Plug-ins, die verwendet werden in Selenium IDE

Die unten aufgefรผhrten Add-ons waren in der alten IDE am weitesten verbreitet. Einige davon, wie beispielsweise Ablaufsteuerung und Screenshot-Funktion bei Fehlern, sind mittlerweile in die aktuelle IDE integriert oder als gepflegte Plugins verfรผgbar.

Name Zweck
Favoriten Um eine Testsuite als Favorit zu markieren und sie mit einem Klick auszufรผhren
Flex Pilot X Fรผr Flex-basierte Automatisierung
FlexMonkium Fรผr Adobe Flex-basierte Aufnahme und Wiedergabe testing in Selenium IDE
Dateiprotokollierung Zum Speichern von Protokollen in einer Datei
Flow Control Zur Steuerung des Testausfรผhrungsablaufs
Markieren Sie Elemente Um ein Web-Steuerelement hervorzuheben
Implizites Warten Auf ein Element eine bestimmte Zeit lang warten
Screenshot bei Fehler Machen Sie bei einem Fehler einen Screenshot
Testergebnisse Speichern Sie die Testfall Ergebnis fรผr eine Testsuite mit einem Klick

Die alte SeleniumDie Downloadseite des Hauptsitzes, auf der diese Dateien gehostet wurden, existiert nicht mehr. Aktuelle Plugins und die IDE selbst werden von der [Website-Adresse/Plattform einfรผgen] vertrieben. Selenium IDE-Projektseite und von Chrome aus Firefox und Edge-Add-on-Stores.

Laden Sie Selenium In diesem Tutorial verwendete Kernerweiterung

Hรคufig gestellte Fragen

Die รผbliche Bezeichnung ist user-extensions.js, und IDE-Erweiterungen verwendeten user-extensions-ide.js. Die รคltere IDE erlaubte die Angabe eines beliebigen Pfades, daher war die Bezeichnung eher eine Konvention als eine zwingende Vorgabe.ping Dadurch werden gemeinsam genutzte Suiten leichter erkennbar.

Prototypfunktionen sind wรคhrend des Ladevorgangs der IDE schreibgeschรผtzt, daher werden ร„nderungen nach dem Start ignoriert. Speichern Sie die Datei, schlieรŸen Sie die IDE vollstรคndig und รถffnen Sie sie erneut. JavaEin Syntaxfehler im Skript verhindert auรŸerdem, dass die gesamte Datei im Hintergrund geladen wird.

ร–ffnen Sie die Browserkonsole und starten Sie die IDE neu. Achten Sie anschlieรŸend auf einen Syntaxfehler in der Datei. Durch Hinzufรผgen einer `console.log`-Zeile am Anfang der Datei kรถnnen Sie รผberprรผfen, ob sie รผberhaupt geladen wurde, bevor Sie mit dem Debuggen einzelner Funktionen beginnen.

Sie schreiben nur die Version mit dem Prรคfix โ€ždoโ€œ. Selenium Die IDE generiert automatisch die AndWait-Variante, die dieselbe Operation ausfรผhrt und anschlieรŸend wartet, bis die Seite vollstรคndig geladen ist. Verwenden Sie die AndWait-Form, wenn die Aktion eine Navigation auslรถst.

Maschinelle Lernmodelle kรถnnen den Code fรผr einen neuen Befehl entwerfen und anhand eines Seiten-Snapshots eine Locator-Strategie vorschlagen. KI-gestรผtzte Locator-Reparatur ist hier ebenfalls hilfreich, da eine benutzerdefinierte `locateElementBy`-Funktion genau der Code ist, der bei Markup-ร„nderungen nicht mehr funktioniert.

Teilweise. Copilot reproduziert das SeleniumDie Muster `.prototype` und `PageBot.prototype` sind in รคlteren Repositories weit verbreitet, kรถnnen aber Hilfsmethoden erzeugen, die vorher nicht existierten. Prรผfen Sie daher jeden vorgeschlagenen Aufruf anhand der Selenese-Befehlsreferenz, bevor Sie ihm vertrauen.

Ja. Eine Datei, die lediglich eine `locateElementBy`-Funktion fรผr `PageBot.prototype` enthรคlt, ist gรผltig. Die neue Strategie steht dann allen bestehenden Befehlen zur Verfรผgung, sodass `click`, `type` und `assert` Elemente darรผber ansprechen kรถnnen.

Selenium RC akzeptierte eine Benutzerdateierweiterung รผber einen Serverschalter, aber RC und Selenium Die Kerne wurden entfernt in Selenium 3. Da WebDriver keinen entsprechenden Hook besitzt, wird die gleiche Logik als gewรถhnliche Hilfsmethode in Ihrem Testframework geschrieben.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: