Browser-Script
Sie können Skripte auf Basis von Node.js und APIs auf Basis von Selenium verwenden, um das Testen von Instana im Browser zu ermöglichen. Mithilfe vordefinierter globaler Variablen und der Browser-Test-APIs von Instana können Sie ein Browser-Skripttest erstellen und ausführen, das die Benutzerinteraktion in einem Webbrowser simuliert.
Instana Verweise auf Browser-Skripte
Um einen Browser-Script-Test zum Aktivieren von Browsertests zu erstellen, benötigen Sie globale Variablen und Module.
Globale Variablen
Die in der Tabelle aufgeführten vordefinierten globalen Variablen beschleunigen die Scriptentwicklung.
| Name | Typ | Details zu |
|---|---|---|
$driver |
@types/selenium-webdriver |
Typdefinitionen für Selenium WebDriverJS. |
$browser |
ThenableWebDriver |
Aktiviert den Wrapper eines WebDriver -Clients, der die Steuerung über einen Browser ermöglicht und den direkten Aufruf von WebDriver -Methoden unter Promise<WebDriver> ohne Aufruf von thenermöglicht |
$secure |
Dict<string> |
Variable für den Zugriff auf Benutzerberechtigungsnachweise. |
$util |
UserUtil |
Dienstprogrammfunktionen wie $util.secrets. |
$network |
Network |
Netzdienstprogramm zum Einrichten des Proxys. |
$synthetic |
Dict<string> |
Umgebungsvariablen. |
$attributes |
UserInsight |
Variable zum Hinzufügen und Bearbeiten angepasster Attribute. |
Die Verwendung und Deklaration der vordefinierten globalen Variablen lauten wie folgt:
$synthetisch
Mit $synthetic.var_name können Sie auf Umgebungs-und Laufzeitvariablen im Script zugreifen. Einige vordefinierte Variablen lauten wie folgt:
$synthetic.LOCATIONoder$synthetic.pop: Wird verwendet, um auf das Positionslabel zuzugreifen, das den ersten Teil dercontroller.locationVariablen bildet.$synthetic.TEST_IDoder$synthetic.id: Dient zum Abrufen der Kennung des ausgeführten synthetischen Tests.$synthetic.TEST_NAMEoder$synthetic.testName: Dient zum Aufrufen der Testbezeichnung des ausgeführten synthetischen Tests.$synthetic.TIME_ZONEoder$synthetic.timeZone: Wird verwendet, um auf die Zeitzone des „ PoP “ zuzugreifen, auf dem der synthetische Test ausgeführt wird.$synthetic.JOB_IDoder$synthetic.taskId: Dient zum Abrufen der Kennung eines Wiedergabeauftrags oder einer Wiedergabetätigkeit und ist gleichzeitig die Ergebnis-ID.$synthetic.testType: Dient zum Aufrufen des Testtyps.$synthetic.description: Zum Aufrufen der Testbeschreibung.$synthetic.labels.xxx: Dient zum Zugriff auf die benutzerdefinierten Eigenschaften, die imcustomPropertiesAbschnitt der Testdefinition definiert sind.
Sie können auch benutzerdefinierte Umgebungsvariablen in der values.yaml Datei des Diagramms „ helm “ festlegen. Sehen Sie sich das folgende Beispiel an:
controller:
customProperties: "tag1=value1;tag2=value2"
Für den Zugriff auf diese angepassten Variablen verwenden Sie $synthetic.tag1 und $synthetic.tag2 im Script.
Verwenden Sie für den Zugriff auf die angepassten Eigenschaften, die im Abschnitt customProperties der Testdefinition definiert sind, und den Eigenschaftswert im Script $synthetic.labels.xxx. Sehen Sie sich das folgende Beispiel an:
// to print test custom property defined in customProperties of test definition
console.info('Test custom property -> Team: ' + $synthetic.labels.Team);
console.info('Test custom property -> Purpose: ' + $synthetic.labels.Purpose);
$secure
Das Browser-Skript „ Instana “ unterstützt die Speicherung von Benutzerdaten wie Benutzername und Passwort, um vertrauliche Informationen sicher zu verwahren. Sie können $secure.MY_SECURE_CREDENTIAL verwenden, um auf vordefinierte sichere Berechtigungsnachweise in Ihrem Script zu verweisen.
Um eine Anmeldeinformation mit dem Synthetic Open- API zu erstellen, führen Sie die folgenden Schritte aus:
- Stellen Sie sicher, dass Sie über die erforderlichen Berechtigungen verfügen.
- Verwenden Sie „Synthetic OpenAPI “ oder den Befehl „synctl“, um eine Anmeldeinformation zu erstellen, indem Sie die Variablen
credentialNamecredentialValueund übergeben.
Verwenden Sie anschließend in Ihrem Browser-Skript $secure.credentialName , um auf den erstellten Berechtigungsnachweis zu verweisen, z. B. $secure.password oder $secure.username.
$secure.credentialName Format unterstützt. Das $secure[credentialName] Format wird nicht unterstützt.$secure.credentialName) werden vor der Skriptausführung aufgelöst. Sie müssen den Namen der Anmeldeinformationen direkt angeben. Erstellen Sie die Referenz nicht dynamisch mithilfe von Variablen, Zeichenfolgenverkettung oder eval(), da diese Methoden nicht unterstützt werden und nicht ausgewertet werden.$attributes
Sie können die Variable $attributes verwenden, um Überwachungsdaten angepasste Attribute hinzuzufügen oder abzurufen. Diese angepassten Attribute werden auch in den Überwachungsergebnissen zusammen mit den anderen Standardüberwachungsergebnisattributen gespeichert.
Instana Die synthetische Überwachung unterstützt die folgenden APIs zur Konfiguration benutzerdefinierter Attribute:
$attributes.set(key, value): Legt den Schlüssel oder Wert fest.$attributes.get(key): Gibt den Wert für den angegebenen Schlüssel zurück$attributes.getKeys(): Gibt ein Array aller Schlüssel zurück.$attributes.has(key): Gibttruezurück, wenn der Schlüssel vorhanden ist.$attributes.unset(key): Entfernt den angegebenen Schlüssel oder Wert.$attributes.unsetAll(): Entfernt alle angepassten Daten.
Das folgende Beispiel zeigt die Funktion $attributes „ API “:
$attributes.set(xxx, yyy) // sets tag xxx to value yyy
let v = $attributes.get(xxx) // sets variable v to the value of tag xxx
$attributesAPI “ festgelegt wurden, sowie auf die benutzerdefinierten Eigenschaften, die customProperties im Abschnitt der Testdefinition definiert wurden, kann in den Testergebnissen über synthetic.tags die Metrik zugegriffen werden. Sie können die synthetic.tags Metrik verwenden, um die Testergebnisse zu filtern, oder einen benutzerdefinierten Wert an die benutzerdefinierte Nutzlast von Smart Alert übergeben.$network
Die folgenden APIs werden in der synthetischen Überwachung von „ Instana “ zur Konfiguration von Proxy-Servern unterstützt:
$network.setProxy(string proxy): Legt einen Proxy-Server fest, der für alle Anfragen verwendet werden soll ( HTTP, HTTPS ).$network.setProxyForHttp(string proxy): Legt einen Proxy-Server fest, der ausschließlich für HTTP -Anfragen verwendet wird.$network.setProxyForHttps(string proxy): Legt einen Proxy-Server fest, der nur für HTTPS-Anforderungen verwendet werden soll$network.setProxyPAC(string pac, object auth): Legt einen Proxy-Server über ein PAC-Script (Proxy Auto-Config) fest.$network.setProxyAdvanced(object proxy): Legt die Proxy-Konfiguration unter Verwendung des von der Chrome-Erweiterung „ Firefox “ ( API ) unterstützten Formats für die Proxy-Einrichtung fest.$network.clearProxy(): Entfernt die Proxy-Konfiguration.$network.getProxy(): Gibt die Proxy-Konfiguration zurück.
$util.secrets
Sie können die $util.secrets Sicherheits API verwenden, um sensible Daten zu schwärzen.
Verwenden Sie den Befehl $util.secrets.setURLSecretsRegExps in Ihrem Script, um geheime Schlüssel über URLs neu zu bearbeiten. Sehen Sie sich das folgende Beispiel an:
// to redact 'key', 'password' and 'secret' query parameters in URL
$util.secrets.setURLSecretsRegExps([/key/i, /password/i, /secret/i]);
Nachdem Sie diese Funktion „ API “ aufgerufen haben, wird der Wert https://example.com/accounts/status?key=mykey123&secret=mysecret „ URL “ erfasst und in der https://example.com/accounts/status?key=*&secret=* Benutzeroberfläche von „ Instana “ angezeigt.
Instana Synthetic entfernt alle Request- und Response-Header, um die Übereinstimmung mit den aktuellen Designs von Instana zu gewährleisten.
Standardmäßig erfasst „ Instana “ bei der Nachverfolgung von „ HTTP “-Aufrufen keine „ HTTP “-Header, um die Übermittlung sensibler Daten zu vermeiden.
Referenzen zum Browser-Test- API
Browsertests unterstützen Selenium-basierte APIs und mehr als 30 weitere erweiterte Browsertest-APIs. Weitere Informationen finden Sie unter „ API -Referenz “.
Ein Browser-Skript-Test schreiben
Sie können einen Browser-Script-Test für die folgenden Aktionen schreiben, um Browsertests zu aktivieren: Die Beispielcodes veranschaulichen, wie ein Browser-Script-Test mit häufig verwendeten APIs geschrieben wird. Weitere Informationen zum vollständigen Beispielcode finden Sie im Abschnitt Scriptbeispiele .
Grundlegende Maßnahmen umsetzen
Die folgenden Beispielcodes zeigen, wie ein Browser-Script-Test zum Implementieren der folgenden Basisaktionen geschrieben wird:
Header vorbereiten: Verwenden Sie den folgenden Befehl, um Anforderungsheader anzupassen, bevor Sie auf Websites zugreifen:
await $browser.addHeader("test", "test"); await $browser.addHeaders({ "test1": "test1", "test2": "test2" }); await $browser.deleteHeaders(["test1", "test2"]); $browser.getHeaders().forEach((value, key) => console.log(">>>>>>>>>>>>>>>>>>>", "User customized headers: ", key + "=" + value));Zugriff steuern: Verwenden Sie die folgenden Befehle, um den Zugriff mit der Liste "Verweigern" und "Zulassen" zu steuern:
await $browser.addHostnamesToDenylist(["*google*", "*timeanddate*"]); await $browser.deleteHostnameFromDenylist("*timeanddate*"); await $browser.get("https://www.google.com");Wenn Sie nach Ausführung dieser Befehle eine Google-Suche durchführen, wird die Meldung angezeigt
wwww.google.com is blocked.URL öffnen: Um URL im Browser zu öffnen und auf die Website zuzugreifen, verwenden Sie den folgenden Befehl:
await $browser.get("http://www.bing.com");Ruhezeit festlegen: Verwenden Sie den folgenden Befehl, um die Ruhezeit im Browser festzulegen. Der Parameter gibt die Inaktivitätszeit in Millisekunden an. Im folgenden Beispiel wird der Browser für 2 Sekunden inaktiviert.
await $browser.sleep(2000);Zusicherung mit Seitentitel verwenden: Die Zusicherung ist in Ihren Tests kritisch, um die Testergebnisse festzulegen Verwenden Sie den folgenden Code, um die Zusicherung mit Seitentitel oder Seitenquelle zu verwenden: Sie können die Bibliothek
const assert = require("assert").strict;oder die Chai-Zusicherungsbibliothekconst { assert } = require("chai");verwenden. Verwenden Sieconsole.log, um die Konsolenausgabe und die Konsolenprotokolldatei zu protokollieren.const { assert } = require("chai"); await $browser.get("http://www.timeanddate.com"); let page = await $browser.getPageSource(); assert.isTrue(page.includes("<title>timeanddate.com</title>")); console.log(">>>>>>>>>>>>>>>>>>>", "Page title: ", await $browser.getTitle());Sitzung abrufen: Verwenden Sie den folgenden Befehl, um Informationen zu einer Sitzung abzurufen:
let session = await $browser.getSession(); console.log(">>>>>>>>>>>>>>>>>>>", "Session id: ", session.getId());Fenstergröße maximieren: Verwenden Sie den folgenden Befehl, um die Größe des Browserfensters zu maximieren:
$browser.manage().window().maximize();Screenshot erstellen: Verwenden Sie den folgenden Befehl, um den Screenshot des Browsers zu erstellen:
await $browser.takeScreenshot();
Seitenelemente finden und mit ihnen interagieren
Warten Sie und suchen Sie ein Element auf der Seite: Sie können die Befehle in der folgenden Tabelle für bestimmte Suchen verwenden:
Name verwenden $browser.waitForAndFindElement($driver.By.id("boxyear"), 1000)Element nach ID suchen, bis das Element sichtbar ist oder der Zeitlimitwert erreicht ist $browser.findElements($driver.By.css('select'))Mit dem CSS-Selektor nach mehreren Elementen auf der Seite suchen $browser.findElement($driver.By.linkText("About"))Element nach linkTextsuchen. $browser.findElement($driver.By.xpath('//input[@value='f']'))Element anhand von XPath suchen $browser.$('#boxyear')Element nach ID suchen. $browser.$$(".rd-box")Elemente nach Klasse suchen. elem.$('h2').$('a').getText()Element nach Elementname suchen. Der folgende Beispielcode zeigt, wie Sie warten und ein Element auf der Seite suchen:
// Find element by XPath and wait for the element until specified timeout value reached await $browser.waitForAndFindElement($driver.By.xpath(`//textarea[@inputmode='search']`), 10000); // Find element by id let elem = await $browser.waitForAndFindElement($driver.By.id("boxyear"), 1000); assert.equal("2022", await elem.getAttribute("value")); assert.equal("2022", await $browser.$('#boxyear').getAttribute("value")); // Find elements by CSS selector let selects = await $browser.findElements($driver.By.css('select')); assert.equal(2, selects.length); // Find elements by class let elems = await $browser.$$(".rd-box"); console.log(await elems[0].$('h2').$('a').getText());Elemente suchen und Aktionen ausführen: Das folgende Beispiel zeigt, wie man ein Element anhand eines CSS-Selektors findet und Tastenbefehle mit ActionSequence sendet:
<input id="sb_form_q" name="q" type="search">let textarea = await $browser.waitForAndFindElement($driver.By.css('#sb_form_q'), 10000); // Actions to send keys await $browser .actions() .move({ origin: textarea }) .sendKeys("synthetic") .pause(5000) .sendKeys($driver.Key.ENTER) .perform();
Anwendungsbedingungen
Warten, bis -Titel kommt Bedingung: Verwenden Sie den folgenden Befehl, um zu warten, bis der Titel kommt Bedingung:
await $browser.wait($driver.until.titleContains('Year 2022 Calendar'), 10000);Bedingung 'Wait and poll until timeout': Verwenden Sie die folgenden Befehle, um die Bedingung 'wait and poll until timeout' anzuwenden:
Hinweis: Das folgende Beispiel zeigt einen Aufruf einer Promise-Kette, der mit einer früheren Version kompatibel ist. Verwenden Sie den Code nicht in der aktuellen Version von „ JavaScript “. Verwenden Sie stattdessen modernen asynchronen JavaScript Code mit Async und Await.$browser.get("https://www.google.com"); $browser.wait(function () { return $browser.getTitle().then(function (title) {return title.includes("Google");}); }, 10000).then(function () { return $browser.findElement($driver.By.linkText("About")).click(); }).then(function () { return $browser.navigate().back(); });
Durch den Browserverlauf navigieren
Zurück navigieren: Verwenden Sie den folgenden Befehl, um zur zuvor aufgerufenen Seite im Browser zurückzukehren:
await $browser.navigate().back();Zu neuen Registerkarten wechseln: Um die aktuelle Fensterkennung abzurufen und zu einem neuen Fenster zu wechseln, um eine neue Seite in einer neuen Registerkarte zu öffnen und zum ursprünglichen Fenster zurückzukehren, verwenden Sie den folgenden Code:
console.log("Windows handle: ", await $browser.getWindowHandle(), "Current url: ", await $browser.getCurrentUrl()); let originalWindow = await $browser.getWindowHandle(); await $browser.switchTo().newWindow(); await $browser.get("http://www.timeanddate.com"); await $browser.switchTo().window(originalWindow); await $browser.takeScreenshot();
Maus bewegen und Tastenanschläge senden
Mausklick: Verwenden Sie den folgenden Befehl, um die Maus zu bewegen:
const element = await $browser.waitForAndFindElement(by, timeout); const out = $browser.actions().move({origin: element}).press().release().perform();Maus bewegen: Verwenden Sie den folgenden Befehl, um die Maus über ein Browserelement zu bewegen:
const element = await $browser.waitForAndFindElement(by, timeout); const out = $browser.actions().move({origin: element, duration: 2000}).perform();Tasten senden: Verwenden Sie den folgenden Befehl, um Tasten zu senden:
await $browser.actions().sendKeys("synthetic").perform();
Umgang mit Shadow-DOM-Elementen
Für den Zugriff auf DOM-Spiegelelemente können Sie die Funktion getShadowRoot() verwenden. Die neue Methode wird für das Diagramm 'Synthetic PoP Helm ' 1.1.1 oder höher unterstützt. Sie müssen ein Upgrade für Ihren synthetischen PoP -Version auf 1.1.1 oder höher durchführen, um die Unterstützung für die Schatten-DOM-Interaktion zu aktivieren.
let shadowHost = await $browser.waitForAndFindElement(shadowHostSelector, timeout);
let shadowRoot = await shadowHost.getShadowRoot();
let element = await shadowRoot.findElement(elementSelector);
console.log("element text is:", await element.getText(), ", id is:", await element.getId());
Proxy einrichten, um auf Websites zuzugreifen
Um einen Proxy für Anfragen an HTTP und HTTPS mithilfe der Variablen
$network$browseroder einzurichten, verwenden Sie den folgenden Befehl. Sie können den Proxy mitstringoderurl.URLdefinieren.await $network.clearProxy(); await $network.setProxyForHttp(proxyServer); website = await accessWebSite(); checkHostname("www.google.com.hk", website) await $network.clearProxy(); let testURL = new URL("http://" + sslProxyServer); await $network.setProxyForHttps(testURL); website = await accessWebSite(); checkHostname("www.google.com", website);Verwenden Sie den folgenden Befehl, um den Proxy für alle Anforderungen mit der Umgehungsliste zum Filtern festzulegen. Nach der Ausführung dieses Befehls im folgenden Beispiel ist kein Proxy für www.google.comverfügbar.
await $network.clearProxy(); await $network.setProxy(proxyServer, "www.google.com"); console.log(">>>>>>>>>>>>>>>>>>>", "Bypass list: ", $network.getProxy().rules.bypassList); website = await accessWebSite(); checkHostname("www.google.com.hk", website);
Geheimnisse schwärzen
Um sensible Daten in „ URL “ zu schwärzen, verwenden Sie den folgenden Befehl. Im folgenden Beispiel wird die „ URL “ als "url": "https://www.bing.com/?mkt=zh-CN&toHttps=1&redig=*"„.“ unkenntlich gemacht.
$util.secrets.setURLSecretsRegExps([/redig/i]);
console.log(">>>>>>>>>>>>>>>>>>>", "Access bing");
await $browser.get("http://cn.bing.com");
await $browser.wait($driver.until.titleContains('Bing'), 10000);
Module verwalten
Sie können Module anderer Anbieter, Kernmodule oder optionale Module in Ihr Browser-Testscript importieren.
Optionales Modul importieren
Das folgende Beispiel zeigt den Befehl zum Import des Zusicherungsmoduls chai:
var assert = require('chai').assert;
Unterstützte Kernmodule
Instana Die Browser-Tests unterstützen die Kernmodule von Node.js in Node.js v18 oder höher.
process, child_process, sowie fs Schreib- und Löschvorgänge. Wenn Sie diese APIs in Ihrem Testscript oder in gebündelten Scripts verwenden, schlägt Ihr Testergebnis möglicherweise mit der folgenden Fehlernachricht fehl. Verwenden Sie diese APIs daher nicht in Ihren Testscripts.[SyntheticPoP] [ERROR] process.exit is not allowed. This API is blocked by playback engine.
Unterstützte Module von Drittanbietern
Instana Die synthetische Überwachung unterstützt die folgenden Module von Drittanbietern:
- @aws-sdk/client-s3 3.626.0
- atob 2.1.2
- Authentifikator 1.1.5
- basic-ftp 4.6.6
- btoa 1.2.1
- Chai 4.3.10
- Farben 1.4.0
- consoleplusplus 1.4.4
- crypto-js 4.2.0
- Faker 5.5.3
- 11.8.6
- joi 17.7.1
- js-yaml 4.1.0
- ldapauth-fork 5.0.2
- lodash 4.17.21
- Moment 2.29.4
- net-snmp 3.6.3
- Protokollpuffer 4.2.0
- q 1.5.1
- re2 1.18.3
- ssh2-sftp-client 7.2.3
- ssl-checker 2.0.7
- textcodierung 0.7.0
- Thrift 0.14.2
- totp-generator 0.0.14
- tough-Cookie 4.1.3
- Unterstreichungszeichen 1.13.3
- url-parse 1.5.10
- urllib 2.41.0
- UUID 3.4.0
- Validator 13.7.0
- ws 7.5.10
- xml2js 0.5.0
Scriptbeispiele
Die folgenden Beispiele enthalten die meisten Browser-Test-APIs und vollständigen Beispielcode.
Diese Beispiele dienen nur zu Demonstrationszwecken. Die neuesten Beispiele findest du im öffentlichen Repository „ GitHub “.
Vollständiger Beispielcode für Aktionen
let click = async (message, by, timeout = 60000) => {
console.log(`Click on ${message} >> ${by} << `);
try {
const element = await $browser.waitForAndFindElement(by, timeout);
return $browser.actions().move({ origin: element }).click().perform();
} catch (err) {
console.error(`\ncatch(click): ${err.message}`);
throw err;
}
};
let hover = async (message, by, timeout = 60000) => {
console.log(`Hover on ${message} >> ${by} << `);
try {
const element = await $browser.waitForAndFindElement(by, timeout);
return $browser.actions().move({ origin: element, duration: 3000 }).perform();
} catch (err) {
console.error(`\ncatch(hover): ${err.message}`);
throw err;
}
};
(async function () {
console.log(">>>>>>>>>>>>>>>>>>>", "Access bing page");
await $browser.get("http://www.bing.com");
console.log(">>>>>>>>>>>>>>>>>>>", "Actions of search");
await hover("search button", $driver.By.xpath("//label[@id='search_icon']"), 10000);
await $browser.takeScreenshot();
await $browser.actions().sendKeys("synthetic").perform();
await click("search button", $driver.By.xpath("//label[@id='search_icon']"), 10000);
})();
Vollständige Beispielcodes für APIs
const { assert } = require("chai");
(async function () {
/**
* manipulate headers and retrieve all the customized headers
*/
await $browser.addHeader("test", "test");
await $browser.addHeaders({ "test1": "test1", "test2": "test2" });
await $browser.deleteHeaders(["test1", "test2"]);
$browser.getHeaders().forEach((value, key) => console.log(">>>>>>>>>>>>>>>>>>>", "User customized headers: ", key + "=" + value));
/**
* manipulate deny and allow list
*/
await $browser.addHostnamesToDenylist(["*google*", "*timeanddate*"]);
await $browser.deleteHostnameFromDenylist("*timeanddate*");
/**
* open url www.bing.com
* find element by class selector
* send keys to search Synthetic in the page
*/
console.log(">>>>>>>>>>>>>>>>>>>", "Access bing page");
await $browser.get("http://www.bing.com");
console.log(">>>>>>>>>>>>>>>>>>>", "Actions of search");
// Find element by XPath and wait for the element until specified timeout value reached
await $browser.waitForAndFindElement($driver.By.xpath(`//textarea[@inputmode='search']`), 10000);
// Sleep or pause to wait for specified milliseconds
await $browser.sleep(5000);
// Take a screenshot
await $browser.takeScreenshot();
// Actions to send keys
await $browser.actions().sendKeys("synthetic").sendKeys($driver.Key.ENTER).perform();
/* Find element by CSS selector and perform actions
let textarea = await $browser.waitForAndFindElement($driver.By.css('#sb_form_q'), 10000);
// Actions to send keys
await $browser
.actions()
.move({ origin: textarea })
.sendKeys("synthetic")
.pause(5000)
.sendKeys($driver.Key.ENTER)
.perform();
*/
/**
* samples of promise chain invocation, which is not recommended but backwards compatible
* samples of waiting and polling function with timeout value
*/
await $browser.deleteHostnameFromDenylist("*google*");
await $browser.get("https://www.google.com");
// Call the wait function.
await $browser.wait(function () {
return $browser.getTitle().then(function (title) {
return title.includes("Google");
});
//If the condition isn't satisfied within 10000 milliseconds (10 seconds), proceed anyway.
}, 10000).then(function () {
return $browser.findElement($driver.By.linkText("About")).click();
}).then(function () {
return $browser.navigate().back();
});
})();
Vollständiger Beispielcode für Proxy
const url = require("url");
const URL = url.URL;
const { assert } = require("chai");
let website;
let proxyServer = "proxyHost:proxyPort";
let sslProxyServer = "username:password@proxyHost:proxyPort";
async function accessWebSite(url) {
console.log(">>>>>>>>>>>>>>>>>>>", "Proxy configuration is: ", JSON.stringify($network.getProxy()));
console.log(">>>>>>>>>>>>>>>>>>>", `Access website ${url}`);
await $browser.get(url);
await $browser.findElement($driver.By.name('q')).click();
await $browser.actions().sendKeys('synthetic').sendKeys($driver.Key.ENTER).perform();
await $browser.takeScreenshot();
return $browser.getCurrentUrl();
}
function checkHostname(hostname, website) {
let actualURL = new URL(website);
console.log(">>>>>>>>>>>>>>>>>>>", "Hostname is: ", actualURL.hostname);
assert.equal(actualURL.hostname, hostname);
}
(async function () {
/**
* samples of proxy configuration settings with await asynchronous
* using $network tools
*/
console.log(">>>>>>>>>>>>>>>>>>>", "Clear proxy configuration");
await $network.clearProxy();
console.log(">>>>>>>>>>>>>>>>>>>", "Set proxy configuration for HTTPS request with string");
await $network.setProxyForHttps(proxyServer);
website = await accessWebSite("https://www.bing.com");
checkHostname("www.bing.com", website)
console.log(">>>>>>>>>>>>>>>>>>>", "Clear proxy configuration");
await $network.clearProxy();
console.log(">>>>>>>>>>>>>>>>>>>", "Set proxy configuration for HTTPS request with URL object");
let testURL = new URL("http://" + sslProxyServer);
await $network.setProxyForHttps(testURL);
website = await accessWebSite("https://www.google.com");
checkHostname("www.google.com", website);
/**
* samples of proxy configuration settings with bypass list
*/
await $network.clearProxy();
await $network.setProxy(proxyServer, "www.google.com");
console.log(">>>>>>>>>>>>>>>>>>>", "Proxy config: ", $network.getProxy());
website = await accessWebSite("https://www.bing.com");
checkHostname("www.bing.com", website);
})();