Browser-Tests mit Selenium IDE-Skripten
Selenium Der IDE-Skripttest ist eine Art von Instana Synthetic Browser-Skripttests.
Verwenden Sie ein Selenium IDE-Skript (auch Seitenskript genannt), um Benutzerinteraktionen mit Ihren Webanwendungen zu simulieren.
Es wird empfohlen, mit einem einfachen Selenium IDE-Skript zu beginnen, wie im Abschnitt Aufzeichnung eines Selenium IDE-Skripts beschrieben, oder das Beispielskript von Selenium zu verwenden.
Dann können Sie die erweiterten Funktionen von Instana Synthetic nutzen, wie z. B. den Zugriff auf Benutzeranmeldeinformationen, das Erstellen von Screenshots usw., wie unter Erweitern der Testfunktionen in Selenium IDE-Skripten beschrieben. Wenn Sie die von Instana bereitgestellten globalen Variablen wie $secure oder erweiterte Browser-Testing-APIs wie await $browser.takeScreenshot() verwenden möchten, können Sie den lokalen Instana Synthetic-browser-script runner verwenden. Mit diesem lokalen Runner können Sie Ihr Selenium IDE-Skript lokal testen und debuggen, da Selenium IDE diese fortgeschrittenen APIs nicht erkennt und Cookies oder Sitzungen für Sie bei jedem Testlauf löscht.
Aufzeichnung eines Selenium IDE-Skripts
Grundlegende Skripte aufzeichnen
Laden Sie die Selenium IDE herunter und installieren Sie sie.
Sie können die Selenium IDE für Firefox und Chrome-Benutzer herunterladen und installieren.
Für Benutzer von Firefox fügen Sie dem Browser das Addon Firefox hinzu. Starten Sie den Browser dann bei Bedarf neu.
Für Chrome-Benutzer führen Sie eine der folgenden Methoden aus:
Hinweis: Die Selenium IDE Chrome-Erweiterung ist nicht mehr im Chrome Web Store erhältlich.Installieren Sie die Selenium IDE über die Befehlszeile oder die Eingabeaufforderung.
npm install -g selenium-ide selenium-ideWeitere Informationen zu den Installationsanweisungen finden Sie in der Readme-Datei.
Laden Sie die IDE von der Website Selenium IDE GitHub herunter, die auf Ihrem Betriebssystem basiert, und führen Sie die Anwendung lokal aus.
Hinweis: Die Anwendung Selenium IDE zeichnet Projekte im Format 3.0 auf, das von der Synthetic PoP BrowserScript Playback Engine noch nicht unterstützt wird.Um die Kompatibilität zu gewährleisten, müssen Sie die Versionsnummer in der Datei
.sidemanuell von 3.0 auf 2.0 ändern.Nachdem Sie Ihr Projekt in der IDE-Anwendung Selenium gespeichert haben, führen Sie die folgenden Schritte aus, um die Datei
.sidemanuell zu bearbeiten:Öffnen Sie die Datei
.sidein einem Texteditor.Suchen Sie das Versionsfeld in der Datei. Das folgende Beispiel zeigt das Aussehen des Versionsfeldes:
{ "id": "some-id", "version": "3.0", ... }Ändern Sie die Version in 2.0.
Speichern Sie die Datei.
Öffnen Sie Selenium IDE über die Menüleiste. Klicken Sie auf den Link
Record a new test in a new projectund zeichnen Sie ein Skript auf, indem Sie die Anweisungen befolgen.Bei der Aufzeichnung generiert 'Selenium IDE' in einem Script einen Befehl für jede Benutzeraktion.

Führen Sie Testaktionen durch, um nach den Schlüsselwörtern
instanain Google zu suchen.Drücken Sie
Enter, um zur Seite mit den Suchergebnissen zu gelangen. Fügen Sie auf dieser Seite eine Bedingungwaithinzu; klicken Sie mit der rechten Maustaste auf das Suchsymbol und wählen SieSelenium IDE -> Wait For -> Present. Geben Sie in der EigenschaftValueeinen Wert für die Wartezeit ein, bis das Element angezeigt wird, z. B. 10000 für eine Wartezeit von bis zu 10 Sekunden.
Fügen Sie eine Behauptung hinzu, um Ihren Test zu verifizieren. Fügen Sie einen Befehl
asserthinzu; klicken Sie mit der rechten Maustaste auf die Seite und wählen SieSelenium IDE -> Assert -> Title.Wenn Sie Ihre Aufnahmen beendet haben, klicken Sie auf die Schaltfläche Aufnahme beenden in Selenium IDE.

Sie können Befehle wie
send keysmit dem Wert von${KEY_ENTER}hinzufügen, umEnterin den Suchtextbereich einzugeben.Geben Sie einen Timeout-Wert wie
10000in der EigenschaftValuedes Befehlswait for element presentan, um auf eine Bedingung zu warten. Verwenden Sie denselbenTargetWert, der im vorherigen Schritt verwendet wurde, um das Webelement für den Suchtextbereich zu finden. Dies ist ein wichtiger Schritt, um sicherzustellen, dass Ihr Test stabil und erfolgreich verläuft. Im Bereich der Browsertests wird dies als explizite Wartezeit bezeichnet. Die Logik fragt die Anwendung nach einer bestimmten Bedingung ab, bevor sie mit dem nächsten Befehl im Code fortfährt. Wenn die Bedingung nicht vor einem bestimmten Zeitlimit erfüllt ist, wird ein Zeitüberschreitungsfehler angezeigt.Testen Sie dann Ihr Skript und klicken Sie auf Ausführen.

Speichern Sie das Skript nach der Aufzeichnung in einer Datei
.side.
Weitere Informationen finden Sie unter Selenium IDE Get Started. Das vollständige Beispiel ist im folgenden Abschnitt zu finden.
Verwenden Sie den lokalen Instana Synthetic-browser-script runner, um das aufgezeichnete Skript lokal zu testen und zu debuggen. Der lokale Läufer Synthetic-browser-script bietet die gleiche Laufzeit wie Instana Synthetics und kann Ihnen helfen, Cookies oder Benutzerprofile für jeden Testlauf zu löschen.
Dann können Sie Selenium IDE test auf Instana erstellen, Create Synthetic Test -> Browser Script Test -> Switch
to Advanced Mode auswählen, auf Add Script klicken und die Datei .side hochladen.
Wenn Sie das Zeitdiagramm in den Testergebnissen auf Instana nicht sehen können. Sie können überprüfen, ob die Test-ID in der Eigenschaft
suites -> testsenthalten ist. Ohne diese Test-ID kann Ihr Test nicht abgespielt werden."suites": [{ "id": "7de135e9-a6c4-4b39-b28a-092bb0d7cbac", "name": "Search Instana", "persistSession": false, "parallel": false, "timeout": 300, "tests": ["c0283e5a-8cbd-492f-8b3d-f2476f319264"] }],Instana unterstützt nur serialisierte Tests in Testsuiten. Daher werden die folgenden Eigenschaften in den Skripten der Selenium IDE von der Instana Browser Playback Engine überschrieben:
- "persistSession": falsch
- "parallel": false
Wie man auf eine Bedingung wartet
Sie können die verfügbaren Explicit Wait-Befehle verwenden, um zu warten, bis eine Bedingung erfüllt ist, bevor Sie mit dem nächsten Befehl im Code fortfahren. Explizites Warten ist eine bewährte Praxis bei Browsertests. Wenn die angegebene Bedingung nicht vor einem bestimmten Timeout-Wert erfüllt ist, wird ein Timeout-Fehler angezeigt. Ihr Test schlägt mit einem Fehler fehl. Der am häufigsten verwendete Befehl
waitistwait for element present. Geben Sie den Wert für die Zeitüberschreitung in Millisekunden in der Eigenschaftvalueein.{ "id": "d13e50bd-f698-4a04-9420-701a21dcde8d", "comment": "", "command": "waitForElementPresent", "target": "id=searchform", "targets": [], "value": "10000" }Mit dem Befehl
pausekönnen Sie eine Pause von einigen Millisekunden einlegen. Im folgenden Beispiel beträgt die Wartezeit 3 Sekunden.{ "id": "60135a5c-6aee-4b9b-86a5-d9d0fa41deb7", "comment": "", "command": "pause", "target": "3000", "targets": [], "value": "" }
Wie man Testergebnisse validiert
Um Ihre Testergebnisse automatisch zu validieren, können Sie Assertions und Explicit Wait verwenden. Wenn die Validierung fehlschlägt, wird der Status des Testergebnisses als fehlgeschlagen angezeigt. Sie können Testfehler mit Synthetic Smart Alert überwachen.
- Sie können mit
wait for element present,assert element presentoder anderen expliziten Wartebefehlen warten, bis das erforderliche Element auf der Benutzeroberfläche vor einer bestimmten Zeitspanne vorhanden ist. Legen Sie einen Wert für die Zeitüberschreitung in der Eigenschaftvalueder Befehlewait forfest. Für die Befehleassertbeträgt der Timeout-Wert 15 Sekunden.{ "id": "e9a3161a-de29-4557-bbf6-9950c1881425", "comment": "", "command": "assertElementPresent", "target": "linkText=About", "targets": [], "value": "" } - Sie können den Befehl
assert titleverwenden, um Seitentitel zu validieren.{ "id": "46eb59c2-5fd6-4481-b3e8-eaaddab79a69", "comment": "", "command": "assertTitle", "target": "instana - Google Search", "targets": [], "value": "" } - Sie können den Befehl
assert textverwenden, um zu bestätigen, dass der Text eines Elements den angegebenen Wert enthält. Die Eigenschaftvaluedieses Befehls muss eine exakte Zeichenfolgenübereinstimmung sein. Selenium Die IDE unterstützt keinen Mustervergleich für diesen Befehl.{ "id": "ed733875-5682-4a3b-9a3e-9286f88a62ca", "comment": "", "command": "assertText", "target": "linkText=About", "targets": [], "value": "About" }
Wie man Meldungen in Konsolenprotokollen ausgibt
Sie können den Befehl echo verwenden, um Protokollierungsmeldungen in Konsolenprotokollen auszudrucken, die Sie bei der Fehlersuche unterstützen.
{
"id": "03e23d25-38e3-4051-81ff-740109350ee8",
"comment": "",
"command": "echo",
"target": "Generate a TOTP token from a TOTP key",
"targets": [],
"value": ""
}
Wie man mit Javascript nach unten scrollt
In den meisten Testfällen muss auf der Seite gescrollt werden, um ein Webelement zu fokussieren, sichtbar oder klickbar zu machen. Im Selenium IDE-Skript müssen Sie JavaScript für den Bildlauf verwenden. Verwenden Sie den Befehl runScript oder executeScript , um einen Bildlauf zu implementieren, wie im folgenden Beispiel gezeigt:
Blättern Sie bis zur Hälfte der Seitenhöhe:
{ "id": "e4d8bc94-cd2c-4648-b64e-952ccfa89aaa", "comment": "", "command": "runScript", "target": "window.scrollTo(0, document.body.scrollHeight/2)", "targets": [], "value": "" }Blättern Sie bis zum Ende der Seite:
{ "id": "e4d8bc94-cd2c-4648-b64e-952ccfa89aaa", "comment": "", "command": "runScript", "target": "window.scrollTo(0, document.body.scrollHeight)", "targets": [], "value": "" }Blättern Sie zum Anfang der Seite:
{ "id": "e4d8bc94-cd2c-4648-b64e-952ccfa89aaa", "comment": "", "command": "runScript", "target": "window.scrollTo(0, 0)", "targets": [], "value": "" }Blättern Sie zu dem Webelement und klicken Sie darauf:
Warten Sie, bis das Element gefunden wurde, blättern Sie zu ihm und klicken Sie es an.
{ "id": "d13e50bd-f698-4a04-9420-701a21dcde8d", "comment": "", "command": "waitForElementPresent", "target": "id=pnnext", "targets": [], "value": "20000" }, { "id": "b345d354-1d95-45d0-81ab-7c78695ed040", "comment": "", "command": "runScript", "target": "const el = document.getElementById('pnnext'); el.scrollIntoView(); el.click();", "targets": [], "value": "" }{ "id": "d13e50bd-f698-4a04-9420-701a21dcde8d", "comment": "", "command": "waitForElementPresent", "target": "css=#pnnext > span:nth-child(2)", "targets": [], "value": "20000" }, { "id": "b345d354-1d95-45d0-81ab-7c78695ed040", "comment": "", "command": "runScript", "target": "const el = document.querySelector('#pnnext > span:nth-child(2)'); el.scrollIntoView(); el.click();", "targets": [], "value": "" }
Wie man Schlüssel versendet
- Um auf den Filterbereich zu doppelklicken und Tasten einzugeben, können Sie folgendes Beispiel verwenden:
{ "id": "60135a5c-6aee-4b9b-86a5-d9d0fa41deb1", "comment": "", "command": "doubleClickAt", "target": "id=repos-list-filter-input", "targets": [], "value": "" }, { "id": "60135a5c-6aee-4b9b-86a5-d9d0fa41deb1", "comment": "", "command": "type", "target": "id=repos-list-filter-input", "targets": [], "value": "instana" } - Um die Taste
Enternach einer Pause von 3 Sekunden im Filterbereich einzugeben, können Sie das folgende Beispiel verwenden:{ "id": "60135a5c-6aee-4b9b-86a5-d9d0fa41deb2", "comment": "", "command": "pause", "target": "3000", "targets": [], "value": "" }, { "id": "d0239041-5bdf-42be-b920-c5055628f161", "comment": "", "command": "sendKeys", "target": "id=repos-list-filter-input", "targets": [], "value": "${KEY_ENTER}" },
Beispiel
Im folgenden Beispiel wird das Selenium IDE-Skript verwendet, um in einer Suchmaschine nach den Instana-Schlüsselwörtern zu suchen:
{
"id": "d54cb226-42e2-493a-9965-c05d209da23a",
"version": "2.0",
"name": "test-google-search",
"url": "https://www.google.com",
"tests": [{
"id": "c0283e5a-8cbd-492f-8b3d-f2476f319264",
"name": "search instana",
"commands": [{
"id": "cd6aaf21-62f8-4d7f-af0a-5fe8beee8fde",
"comment": "",
"command": "open",
"target": "/",
"targets": [],
"value": ""
}, {
"id": "f6ef14b9-0f06-4b62-bb29-41c21a298703",
"comment": "",
"command": "click",
"target": "id=APjFqb",
"targets": [],
"value": ""
}, {
"id": "ed0b72f9-8da9-4413-8088-819b89f1f6dc",
"comment": "",
"command": "type",
"target": "id=APjFqb",
"targets": [],
"value": "instana"
}, {
"id": "f9746499-1d97-4f83-aa8a-a5419d9e3922",
"comment": "",
"command": "sendKeys",
"target": "id=APjFqb",
"targets": [],
"value": "${KEY_ENTER}"
}, {
"id": "93939f21-739f-4c84-bb2e-580af6b1bc76",
"comment": "",
"command": "waitForElementPresent",
"target": "css=.zgAlFc svg",
"targets": [],
"value": "10000"
}, {
"id": "331e3fc1-9baa-4519-9814-3105d6d06937",
"comment": "",
"command": "assertTitle",
"target": "instana - Google Search",
"targets": [],
"value": ""
}]
}],
"suites": [{
"id": "7de135e9-a6c4-4b39-b28a-092bb0d7cbac",
"name": "Search Instana",
"persistSession": false,
"parallel": false,
"timeout": 300,
"tests": ["c0283e5a-8cbd-492f-8b3d-f2476f319264"]
}],
"urls": ["https://www.google.com/"],
"plugins": []
}
Erweiterung der Testmöglichkeiten in Selenium IDE-Skripten
Instana Synthetic Browser Testing bietet mehr Möglichkeiten als Selenium IDE:
Instana Synthetic liefert umfangreiche Testergebnisse, darunter Zeitreihendiagramme, Dateien im HTTP Archivformat (HAR), Screenshots, Aufzeichnungen, Browserprotokolle und Konsolenprotokolle.
Instana Synthetic bietet erweiterte Browser-Test-APIs und globale Variablen.
Wenn Sie Ihre Selenium IDE-Skripte mit erweiterten Browsertest-APIs und globalen Variablen, die von Instana Synthetic zur Verfügung gestellt werden, anpassen möchten, lesen Sie die folgenden Beispiele. Sie müssen den lokalen Synthetic-browser-script-Runner verwenden, um Ihre Skripte mit diesen erweiterten Funktionen zu testen und zu debuggen, da Selenium IDE diese nicht unterstützt.
Zugriff auf Benutzeranmeldeinformationen
Zugriff auf die im Instana-Backend-Server definierten Benutzeranmeldeinformationen
Um einen Berechtigungsnachweis mit der Synthetic Open API zu erstellen, führen Sie die folgenden Schritte aus:
- Vergewissern Sie sich, dass Sie die richtigen Berechtigungen haben.
- Verwenden Sie Synthetic OpenAPI, um ein Credential zu erstellen, indem Sie die Variablen
credentialNameundcredentialValueübergeben.
Verwenden Sie dann in Ihrem Testskript
$secure.credentialName, um auf den erstellten Berechtigungsnachweis zu verweisen, z. B.$secure.passwordoder$secure.username.${}in derValueEigenschaft in Selenium IDE Skript ist, um auf die vordefinierten Variablen zu verweisen, um von konstanten String zu unterscheiden.$secure.credentialNameist der Zugriff auf die Benutzeranmeldeinformationen in Instana.
Hinweis: Es wird nur das Format$secure.credentialNameunterstützt. Das Format$secure[credentialName]wird nicht unterstützt.{ "id": "98b7df8f-ec53-47f9-b7a0-0eedbfc64ff0", "comment": "", "command": "click", "target": "id=email", "targets": [], "value": "" }, { "id": "83ae509f-4247-4acc-ab99-46ef4c620f4f", "comment": "", "command": "type", "target": "id=email", "targets": [], "value": "${$secure.username}" }Generieren Sie ein zeitbasiertes Einmalpasswort (TOTP) aus einem geheimen Schlüssel, um sich auf der Website mit Zwei-Faktor-Authentifizierung anzumelden ( 2FA ).
{ "id": "ec51296b-4d16-4167-ac83-ba87f89cc0c7", "comment": "Generate a TOTP token from a TOTP key", "command": "executeScript", "target": "return $browser.generateTOTPToken($secure.totpKey);", "targets": [], "value": "totpToken" }, { "id": "3cbc306a-ed33-46bf-9923-92752b0466f2", "comment": "", "command": "type", "target": "id=password", "targets": [], "value": "${totpToken}" }
Wie man einen Screenshot macht
Die Screenshots finden Sie auf der Seite mit den Details der Instana-Testergebnisse.
{
"id": "b49ff289-f041-44f1-836b-ba7e993c3f07",
"comment": "",
"command": "executeScript",
"target": "await $browser.takeScreenshot()",
"targets": [],
"value": ""
}
Wie man mit $synthetic auf globale Variablen zugreift
Sie können $synthetic.xxxx, $secure.xxx oder $env.xxx verwenden, um auf globale Variablen zuzugreifen, wie im folgenden Beispiel gezeigt.
Für die Verwendung von Variablen in der Syntax von Schablonenstrings in JavaScript, wie z. B. dem Befehl echo , verwenden Sie die Standard-Syntax Node.js und fügen die Variablen in ${} ein.
{
"id": "da853ea2-7253-4938-ad2d-9272f4c6d3e2",
"comment": "",
"command": "echo",
"target": "tag1's value is ${$synthetic.tag1}",
"targets": [],
"value": ""
}
Verwendung der $attributes API zur Anpassung von Attributen
{
"id": "26438c58-868d-4d6d-9e6f-dbe9d8f373fd",
"comment": "",
"command": "executeScript",
"target": "$attributes.set('regionName', 'green-region');",
"targets": [],
"value": ""
}
Auf die benutzerdefinierten Attribute, die von $attributes API im Skript festgelegt wurden, und die benutzerdefinierten Eigenschaften, die von customProperties in der Testspezifikation definiert wurden, kann in den Testergebnissen mit der Metrik synthetic.tags zugegriffen werden. Sie können die synthetic.tags Metrik zum Filtern der Testergebnisse oder zum Übergeben eines benutzerdefinierten Werts an die benutzerdefinierte Nutzlast von Smart Alert. 
So rufen Sie die erweiterten Browser-Test-APIs von Instana auf
Verwenden Sie die Befehle Selenium
runScriptundexecuteScript, um erweiterte Browser-Test-APIs aufzurufen.Sie können die Befehle Selenium
runScriptundexecuteScriptverwenden, um vordefinierte Browser-Test-APIs und globale Variablen in Instana Browser Testing aufzurufen.Der Unterschied zwischen
executeScriptundrunScriptbesteht darin, dassexecuteScriptdie Speicherung des zurückgegebenen Wertes in einer Variablen unterstützt. Sie können dannassertoderechodie Variable mit${xxx}. Um den zurückgegebenen Wert zu speichern, verwenden Sie das Schlüsselwortreturnund geben einen Variablennamen in das Eingabefeldvalueein.{ "id": "ec51296b-4d16-4167-ac83-ba87f89cc0c7", "comment": "Generate a TOTP token from a TOTP key", "command": "executeScript", "target": "return $browser.generateTOTPToken($secure.totpKey);", "targets": [], "value": "totpToken" }, { "id": "3cbc306a-ed33-46bf-9923-92752b0466f2", "comment": "", "command": "echo", "target": "Generated TOTO token ${totpToken}", "targets": [], "value": "" }Definieren Sie eine Umgebungsvariable, und verwenden Sie sie in den Browser-Test-APIs.
{ "id": "10d09a25-d101-43b0-84df-f22265b7cec6", "comment": "", "command": "storeJson", "target": "{\"proxy\": \"<proxy_server>:8080\", \"noproxy\": \"localhost,google.com,192.168.1.0/24\"}", "targets": [], "value": "proxyConfig" }, { "id": "237bd334-d963-4a73-b9bb-4c31f1dce051", "comment": "", "command": "runScript", "target": "await $browser.setProxy(${proxyConfig.proxy}, ${proxyConfig.noproxy});", "targets": [], "value": "" }Blättern Sie zu dem Webelement und klicken Sie darauf.
Sie können die Instana-API für Browsertests verwenden, um vorherige Bildlaufschritte einfach zu implementieren. Das unten stehende Beispiel implementiert die Logik der Elemente
waiting for element present,waiting for element visible,scrollIntoViewundclick. Mit der FunktionscrollIntoViewkann das Element in den sichtbaren Bereich des Browserfensters verschoben werden.{ "id": "b345d354-1d95-45d0-81ab-7c78695ed040", "comment": "", "command": "runScript", "target": "let element = await $browser.waitForAndFindElement(By.xpath(`//a[contains(.,'Customer stories')]`), 30000); await $browser.executeScript(`arguments[0].scrollIntoView()`, element); await $browser.executeScript(`arguments[0].click()`, element)", "targets": [], "value": "" }
Ablehnung bestimmter Anträge
{
"id": "2e91846e-037b-473d-a977-7fbdfe52d1a4",
"comment": "",
"command": "executeScript",
"target": "await $browser.addHostnamesToDenylist(['ajax.googleapis.com/ajax/libs/jquery']);",
"targets": [],
"value": ""
}
So verwenden Sie die $network API, um einen Proxy zu setzen
{
"id": "a418460e-a0a9-4c68-bbd0-fb78d6495e92",
"comment": "",
"command": "runScript",
"target": "await $network.setProxy(${proxyConfig.proxy}, ${proxyConfig.noproxy});",
"targets": [],
"value": ""
}
Beispiel
Im folgenden Beispiel rufen die Befehle Selenium die Instana-Browser-Test-APIs und globale Variablen auf.
Beispiel für die Anmeldung und Validierung der Instana-Benutzeroberfläche