• /
  • EnglishEspañolFrançais日本語한국어Português
  • Se connecterDémarrer

Cette traduction automatique est fournie pour votre commodité.

En cas d'incohérence entre la version anglaise et la version traduite, la version anglaise prévaudra. Veuillez visiter cette page pour plus d'informations.

Créer un problème

Référence du navigateur scripté synthétique (Chrome et Firefox)

Pour exécuter votre moniteur de navigateur scripté en utilisant les API Sélénium Webdriver 4.1, assurez-vous que la syntaxe de votre script utilise les variables $selenium et $webDriver. Pour accéder aux APIs sélénium Webdriver 3.6.0, utilisez les variables $driver et $browser comme décrit dans la documentation de référence du navigateur 0.5.0+.

En particulier:

  • $selenium fournit toutes les exportations du module selenium-webdriver (par exemple, ActionSequence, Button, By ou WebElement). Cela correspond à l'utilisation $driver dans les environnements d'exécution plus anciens.
  • $webDriver est une Synthétique monitoring instance selenium-webdriver.WebDriver()de. Il expose les principales API de base WebDriver comme get() et findElement(), ainsi que certaines API personnalisées de Synthétique. Cela correspond à l'utilisation de $browser dans les environnements d'exécution plus anciens.
  • $headers offre la possibilité de modifier les en-têtes de requête. Cette fonctionnalité était disponible dans les anciens environnements d'exécution dans plusieurs méthodes $browser
  • $urlFilter offre la possibilité de créer des listes d'autorisation et de refus pour limiter requests à certains domaines. Cette fonctionnalité était disponible dans les anciens environnements d'exécution dans plusieurs méthodes $browser

Si vous utilisez une ancienne version du moniteur, consultez la documentation des versions 0.5.0 et 0.6.0 du moniteur ou la documentation des versions 0.4.0 et inférieures du moniteur.

Pour en savoir plus sur les versions du moniteur et les différences d’exécution, consultez Environnements d’exécution.

Important

Le gestionnaire de promesses / contrôle de flux Sélénium Webdriver permettait à certaines fonctions de s'exécuter dans l'ordre, sans gérer manuellement les promesses/fonctions asynchrones. Cela a été supprimé dans sélénium Webdriver 4.0 et n'est plus disponible dans l'environnement d'exécution. Toutes les fonctions asynchrones et les promesses doivent être gérées avec la chaîne de promesses await ou .then . Cela garantira que les fonctions de script s'exécuteront dans l'ordre prévu.

Pour quelques exemples d'utilisation courante, voir Introduction au moniteur de navigateur scripté.

Fonctions de niveau supérieur : créez votre script

New Relic appelle les fonctions de niveau supérieur directement depuis votre instance $webDriver . Ils offrent une large gamme de fonctionnalités couvrant de nombreuses actions scriptables de base.

Les méthodes waitForAndFindElement(locator, timeout) et waitForPendingRequests(timeout) ont été supprimées de l'environnement d'exécution et ne sont pas disponibles via $webDriver. La compatibilité descendante est disponible, mais elle est considérée comme obsolète et peut être supprimée des futurs runtimes. Utilisez l’extrait de code suivant pour remplacer leur fonctionnalité :

Fonction

Description

$webDriver.actions()

Crée une nouvelle séquence d'action à l'aide de ce pilote. Pour une liste des actions disponibles, voir ActionSequence.

Valeur de retour : void

$headers.add(headerKey: string, headerValue: string)

Ajoute l'en-tête headerKey avec la valeur headerValue à l'exécution.

Valeur de retour : void

$headers.addMultiple(headers: {key:value...})

Ajoute plusieurs en-têtes à l'exécution.

Valeur de retour : void

$headers.get(headerKey: string)

Renvoie une carte des en-têtes actuellement configurés.

Valeur de retour : promesse

$headers.getAll()

Renvoie une carte des en-têtes actuellement configurés.

Valeur de retour : carte

$headers.getKeys()

Renvoie un éventail de clés d'en-tête actuellement configurées.

Valeur de retour : éventail

$headers.has(headerKey: string)

Renvoie un booléen indiquant si cet en-tête existe.

Valeur de retour : booléen

$headers.remove(header: string)

Supprime un en-tête spécifique de l'exécution.

Valeur de retour : void

$headers.removeMultiple(headers: {key:value...})

Supprime tous les en-têtes de l'argument lors de l'exécution.

Valeur de retour : void

$headers.clear()

Supprime tous les en-têtes de l'exécution.

Valeur de retour : void

$urlFilter.addToDenyList(hostnameArr: [string])

Ajoute tous les noms d'hôte dans un éventail d'arguments à votre liste de refus. Permet d'utiliser des caractères génériques.

Valeur de retour : promesse

$urlFilter.addToAllowList(hostnameArr: [string])

Ajoute tous les noms d'hôte dans un éventail d'arguments à votre liste de domaines autorisés. Permet d'utiliser des caractères génériques.

Valeur de retour : promesse

$urlFilter.removeFromDenyList(hostnameArr: [string])

Supprime tous les noms d'hôte dans l'argument de votre liste de refus.

Valeur de retour : promesse

$urlFilter.removeFromAllowList(hostnameArr: [string])

Supprime tous les noms d'hôte dans l'argument de votre liste de domaines autorisés.

Valeur de retour : promesse

$webDriver.executeAsyncScript(script: ?, var_args: ?)

Planifie une commande pour exécuter du JavaScript asynchrone dans le contexte du cadre ou de la fenêtre actuellement sélectionné.

Valeur de retour : promesse

$webDriver.executeScript(script: ?, var_args: ?)

Planifie une commande pour exécuter JavaScript dans le contexte du cadre ou de la fenêtre actuellement sélectionné.

Valeur de retour : promesse

$webDriver.findElement(locator: $selenium.Locator)

Planifiez une commande pour rechercher un élément sur la page. Si non trouvé, Synthétique monitoring renvoie une erreur.

Valeur de retour : WebElementPromise

$webDriver.findElements(locator: $selenium.Locator)

Planifiez une commande pour rechercher plusieurs éléments sur la page.

Valeur de retour : promesse

$webDriver.get(url: string)

Charge une page Web dans un navigateur Synthétique.

Valeur de retour : promesse

$webDriver.getAllWindowHandles()

Planifie une commande pour récupérer la liste actuelle des poignées de fenêtre disponibles.

Valeur de retour : promesse

$webDriver.getCapabilities()

Une promesse qui se résoudra avec les capacités de l'instance.

Valeur de retour : promesse

$webDriver.getCurrentUrl()

Planifie une commande pour récupérer l'URL de la page actuelle.

Valeur de retour : promesse

$webDriver.getPageSource()

Planifie une commande pour récupérer la source de la page actuelle. La source de la page renvoyée est une représentation du DOM sous-jacent. Ne vous attendez pas à ce qu'il soit formaté ou échappé de la même manière que la réponse envoyée depuis le serveur Web.

Valeur de retour : promesse

$webDriver.getSession()

Une promesse pour la séance de ce client.

Valeur de retour : promesse

$webDriver.getTitle()

Planifie une commande pour récupérer le titre de la page actuelle.

Valeur de retour : promesse

$webDriver.getWindowHandle()

Planifie une commande pour récupérer le handle de fenêtre actuel.

Valeur de retour : promesse

$webDriver.manage()

L'interface d'options pour cette instance. Vous pouvez gérer les cookies, les délais d'expiration et d'autres options de fenêtre.

Valeur de retour : void

$webDriver.navigate()

L'interface de navigation (historique des fonctions du navigateur) pour cette instance.

Valeur de retour : void

$webDriver.sleep()

Planifie une commande pour mettre le pilote en veille pendant la durée donnée.

Valeur de retour : promesse

$webDriver.switchTo()

L'interface cible localisateur pour cette instance.

Valeur de retour : void

$webDriver.takeScreenshot()

Planifie une commande pour effectuer une capture d'écran.

Valeur de retour : promesse

$webDriver.wait(fn: $driver.Condition, timeout: number, opt_message: string)

Planifie une commande pour attendre qu'une condition soit remplie, telle que définie par votre fonction fournie.

Valeur de retour : WebElement

$browser.waitForPendingRequests(timeout: number)

Force le script à attendre que requests qui ont été initiées soient renvoyées, jusqu'au délai d'expiration. Utile pour suivre les ressources non bloquantes.

Valeur de retour : promesse

Liste de refus : utilisation de caractères génériques

Si vous souhaitez ajouter un domaine à la liste de refus pour votre instance de navigateur, les caractères génériques doivent correspondre à la syntaxe de l'URL à bloquer.

Une liste de refus globale .com doit contenir ces fonctions :

Fonction

Action de blocage

$urlFilter.addToDenyList(['*.com']);

a.com

$urlFilter.addToDenyList([*.*.com']);

a.b.com

$urlFilter.addToDenyList([*.*.*.com']);

a.b.c.com

$urlFilter.addToDenyList([www.*.com']);

www.a.com

$urlFilter.addToDenyList([www.*.*.com']);

www.a.b.com

$urlFilter.addToDenyList(['www.*.*.*.com']);

www.a.b.c.com

Options : Gérer l'instance du navigateur

Ces fonctions gèrent les options de votre instance de navigateur, telles que les cookies, les délais d'expiration et la taille de la fenêtre. Accédez à ces options via la fonction $webDriver.manage() .

Fonction

Description

$webDriver.manage().addCookie(spec: object)

Planifie une commande pour ajouter un cookie.

spec est un objet d'enregistrement décrivant un cookie de navigateur. Pour plus d'informations, consultez la documentation Webdriver.

Valeur de retour : promesse

$webDriver.manage().deleteAllCookies()

Planifie une commande pour supprimer tous les cookies visibles sur la page actuelle.

Valeur de retour : promesse

$webDriver.manage().deleteCookie(name: string)

Planifie une commande pour supprimer le cookie avec le nom donné. Cette commande est un no-op s'il n'y a pas de cookie avec le nom donné visible sur la page actuelle.

Valeur de retour : promesse

$webDriver.manage().getCookie(name: string)

Planifie une commande pour récupérer le cookie avec le nom donné. Renvoie null s'il n'existe pas de tel cookie. Le cookie sera renvoyé sous forme d'objet JSON comme décrit par le protocole Webdriver.

Valeur de retour : promesse

$webDriver.manage().getCookies()

Planifie une commande pour récupérer tous les cookies visibles sur la page actuelle. New Relic Syntheticcs renvoie chaque cookie sous forme d'objet JSON comme décrit par le protocole Webdriver.

Valeur de retour : promesse

$webDriver.manage().getTimeouts()

Renvoie le script actuel, la pageLoad et les délais d'expiration implicites.

Valeur de retour : promesse

$webDriver.manage().setTimeouts({implicit: numberMS})

Spécifie la durée pendant laquelle le pilote doit attendre lors de la recherche d'un élément s'il n'est pas immédiatement présent. La définition du délai d’attente sur 0 désactive l’attente implicite.

Soyez prudent lorsque vous augmentez le délai d'attente, car cela augmentera les temps d'exécution des tests, en particulier avec des stratégies de localisation plus lentes comme XPath. La valeur par défaut est de 10 secondes.

Valeur de retour : promesse

$webDriver.manage().setTimeouts({pageLoad: numberMS})

Définit la durée d'attente pour que le chargement d'une page soit terminé avant de renvoyer une erreur. Si le délai d'attente est négatif, le chargement des pages peut durer jusqu'à 180 secondes. La valeur par défaut est de 60 secondes.

Valeur de retour : promesse

$webDriver.manage().setTimeouts({script: numberMS})

Définit la durée d'attente, en millisecondes, pour qu'un script asynchrone termine son exécution avant de renvoyer une erreur. La valeur par défaut est de 30 secondes.

Valeur de retour : promesse

$webDriver.manage().window().getRect()

Récupère la position actuelle de la fenêtre (en x et y), par rapport au coin supérieur gauche de l'écran et la taille de la fenêtre (en largeur et en hauteur).

Valeur de retour : promesse

$webDriver.manage().window().maximize()

Maximise la fenêtre actuelle.

Valeur de retour : promesse

$webDriver.manage().window().setRect({x: number|undefined, y: number|undefined, width: number|undefined, height: number|undefined})

Définissez la position actuelle de la fenêtre (comme x et y), par rapport au coin supérieur gauche de l'écran et la taille de la fenêtre (comme largeur et hauteur).

Valeur de retour : promesse

localisateur : Rechercher un élément de page

Les localisateurs sont une collection de fonctions d'usine permettant de créer une instance locator . localisateur recherche des éléments DOM , qui peuvent être passés à des fonctions telles que $webDriver.findElement. Appelez-les via $selenium.By.

Fonction

Description

$selenium.By.className(className: string)

Localise un élément qui a un nom de classe spécifique. Le localisateur renvoyé équivaut à la recherche d'éléments avec le sélecteur CSS .class.

Valeur de retour : localisateur

$selenium.By.css(cssName: string)

Localise un élément à l'aide d'un sélecteur CSS.

Valeur de retour : localisateur

$selenium.By.id(id: string)

Localise un élément par son ID.

Valeur de retour : localisateur

$selenium.By.linkText(linkText: string)

Localise les éléments de lien dont le texte visible correspond à la chaîne donnée.

Valeur de retour : localisateur

$selenium.By.js(js: string)

Localise un élément en évaluant une expression JavaScript.

Valeur de retour : localisateur

$selenium.By.name(name: string)

Localise les éléments dont l'attribut name a la valeur donnée.

Valeur de retour : localisateur

$selenium.By.partialLinkText(partialLinkText: string)

Localise les éléments de lien dont getText visible contient la sous-chaîne donnée.

Valeur de retour : localisateur

$selenium.By.tagName(tagName: string)

Localise les éléments avec un nom tag donné. Le localisateur renvoyé équivaut à utiliser la fonction DOM getElementsByTagName .

Valeur de retour : localisateur

$selenium.By.xpath(xpath: string)

Localise les éléments correspondant à un sélecteur XPath.

Valeur de retour : localisateur

WebElement : Interagir avec l'élément de page

Lorsqu'une fonction telle que $webDriver.findElement renvoie une référence WebElement, ces fonctions peuvent être utilisées pour interagir avec cet élément. Par exemple, vous pouvez cliquer sur des boutons, envoyer du texte aux entrées de formulaire et obtenir les attributs des éléments à tester.

Fonction

Description

click()

Clique sur cet élément.

Valeur de retour : auto-référence

sendKeys(var_args: ?)

Planifie une commande pour taper une séquence sur l'élément DOM représenté par cette instance.

Valeur de retour : WebElement

getTagName()

Planifie une commande pour interroger le nom tag/ nœud de cet élément.

Valeur de retour : WebElement

getCssValue(name: string)

Planifie une commande pour interroger le style calculer de l'élément représenté par cette instance. Si l'élément hérite du style nommé de son parent, le parent sera interrogé pour sa valeur. Dans la mesure du possible, les valeurs de couleur seront converties en leur représentation hexadécimale (par exemple, #00ff00 au lieu de rgb(0, 255, 0)).

Valeur de retour : promesse

getAttribute(name: string)

Planifie une commande pour interroger la valeur de l'attribut donné de l'élément.

Valeur de retour : promesse

getText()

Récupère le innerText visible (non masqué par CSS) de cet élément, y compris les sous-éléments, sans aucun espace blanc de début ou de fin.

Valeur de retour : promesse

isEnabled()

Planifie une commande pour demander si l'élément DOM représenté par cette instance est activé, comme indiqué par l'attribut désactivé.

Valeur de retour : promesse

isSelected()

Planifie une commande pour demander si cet élément est sélectionné.

Valeur de retour : promesse

submit()

Planifie une commande pour soumettre le formulaire contenant cet élément (ou cet élément s'il s'agit d'un élément FORM ). Cette commande est nulle si l'élément n'est pas contenu dans un formulaire.

Valeur de retour : promesse

clear()

Planifie une commande pour effacer la valeur de cet élément.

Valeur de retour : promesse

isDisplayed()

Planifie une commande pour tester si cet élément est actuellement affiché.

Valeur de retour : promesse

ActionSequence : Lier plusieurs actions

Les séquences d'actions peuvent créer une interaction complexe entre l'utilisateur et votre site Web.

  • Pour créer une nouvelle séquence d’actions, utilisez $webDriver.actions().
  • Pour lier plusieurs actions ensemble dans une séquence, incluez perform() après chacune. Cela exécute puis termine des séquences individuelles, y compris des séquences à action unique.

Le tableau suivant contient une liste des actions disponibles. Pour plus d'informations, consultez la documentation Webdriver ActionSequence sur GitHub.

Fonction

Description

click(opt_elementOrButton: ?, opt_button: ?)

Clique sur un bouton de la souris. Si un élément est fourni, la souris sera d'abord déplacée au centre de cet élément. Ceci est équivalent à WebElement.click().

Valeur de retour : actionsequence

doubleClick(opt_elementOrButton: ?, opt_button: ?)

Double-clique sur un bouton de la souris. Si un élément est fourni, la souris sera d'abord déplacée au centre de cet élément.

Valeur de retour : actionsequence

dragAndDrop(element: ?, location: ?)

Fonction pratique pour effectuer une manœuvre de glisser-déposer. L'élément cible peut être déplacé vers l'emplacement d'un autre élément, ou par un décalage (en pixels). L'emplacement est un objet avec deux propriétés x et y: {x: x_offset, y: y_offset}.

Valeur de retour : actionsequence

keyDown(key: ?)

Effectue une pression sur une touche de modification. Doit être l’un des suivants : ALT, CONTROL, SHIFT, COMMAND ou META. La touche de modification n'est pas désactivée tant que keyUp() ou sendKeys() n'est pas appelé. La touche enfoncée sera ciblée sur l'élément actuellement focalisé.

Valeur de retour : actionsequence

keyUp(key: ?)

Effectue une sortie de touche de modification. La sortie vise l'élément actuellement focalisé.

Valeur de retour : actionsequence

press(opt_elementOrButton: ?, opt_button: ?)

Appuie sur un bouton de la souris. Le bouton de la souris ne sera pas désactivé tant que release ne sera pas appelé, que cet appel soit effectué dans cette séquence ou dans une autre. Le comportement d'un événement hors service (comme l'appel press() ou click() lorsque le bouton est déjà maintenu enfoncé) n'est pas défini.

Valeur de retour : actionsequence

release(opt_elementOrButton: ?, opt_button: ?)

sortir un bouton de la souris. Le comportement n'est pas défini pour l'appel de cette fonction sans un appel préalable à press().

Valeur de retour : actionsequence

move(location: ?, offset: ?)

Déplace la souris. L'emplacement vers lequel se déplacer peut être spécifié en termes de position actuelle de la souris, d'un décalage par rapport au coin supérieur gauche d'un élément ou d'un élément (auquel cas le milieu de l'élément est utilisé).

Valeur de retour : actionsequence

perform()

Exécute cette séquence d'actions.

Valeur de retour : promesse

sendKeys(args: ?)

Simule la saisie de plusieurs touches. Chaque touche de modification rencontrée dans la séquence ne sera pas désactivée jusqu'à ce qu'elle soit rencontrée à nouveau. Tous les événements clés seront ciblés sur l'élément actuellement focalisé. Pour obtenir la liste complète des clés non alphanumériques prises en charge, consultez la documentation de la clé d'énumération Webdriver sur GitHub.

Valeur de retour : actionsequence

Promesses : Lier les actions en séquences

Vous pouvez également exécuter des fonctions directement sur les promesses. Synthétique monitoring est un environnement Node.js natif et utilise les promesses standards Node.js

Ces fonctions évaluent l’état des promesses, les annulent, etc. En particulier, vous pouvez créer des séquences d'actions avec la fonction then() et ses sœurs, finally() et catch(). Pour plus d'informations, voir Actions de séquence.

Conseil

En plus de prendre en charge la chaîne de promesses à l'aide de .then syntaxe, cet environnement d'exécution prend également en charge la syntaxe async-await.

Fonction

Description

isPending()

La valeur de cette promesse est-elle encore en cours de calcul ?

Valeur de retour : booléen

then(opt_callback: fn(T: ?), opt_errback: fn())

Enregistre les auditeurs lorsque cette instance est résolue. Il s'agit de la fonction de base utilisée pour lier des actions synchrones dans votre script.

Valeur de retour : promesse

finally(callback: fn())

Enregistre un écouteur à invoquer lorsque cette promesse est résolue, que la valeur de la promesse ait été calculée avec succès ou non.

Valeur de retour : promesse

catch(callback: fn())

Enregistre un auditeur pour le cas où cette promesse est rejetée.

Valeur de retour : promesse

Naviguer : parcourir l'historique du navigateur

La fonction $webDriver.navigate() expose un certain nombre de fonctions qui vous permettent de vous déplacer en arrière et en avant dans l'historique de votre navigateur, d'actualiser votre page et de naviguer vers de nouvelles pages.

Fonction

Description

Conditions : Pause et attente des conditions

Conseil

Vous pouvez en apprendre plus sur les attentes dans sélénium dans leur documentation officielle.

Utilisé avec $webDriver.wait, until interrompt l'exécution de votre script jusqu'à ce que la condition soit remplie. Pour plus d'informations, consultez la documentation Webdriver until de sélénium.

Les fonctions suivantes sont disponibles pour $selenium.until.Condition:

Fonction

Description

ableToSwitchToFrame(frame: ?)

Crée une condition qui attendra que le pilote d'entrée puisse basculer vers le cadre désigné. Le cadre cible peut être spécifié comme :

  • Un index numérique dans window.frames pour la trame actuelle

  • Un webdriver.WebElement, qui doit référencer un élément FRAME ou IFRAME sur la page actuelle

  • Un localisateur qui peut être utilisé pour localiser d'abord un FRAME ou IFRAME sur la page actuelle avant de tenter d'y accéder

    Une fois cette condition résolue avec succès, le conducteur pourra se concentrer sur le nouveau cadre.

    Valeur de retour : condition

alertIsPresent()

Crée une condition qui attend qu'une alerte soit ouverte. En cas de succès, la promesse renvoyée sera remplie avec le handle de l'alerte ouverte.

Valeur de retour : condition

elementIsDisabled(element: $selenium.WebElement)

Crée une condition qui attendra que l'élément donné soit désactivé.

Valeur de retour : condition

elementIsEnabled(element: $selenium.WebElement)

Crée une condition qui attendra que l'élément donné soit activé.

Valeur de retour : condition

elementIsNotVisible(element: $selenium.WebElement)

Crée une condition qui attendra que l'élément donné soit dans le DOM, mais non visible pour l'utilisateur.

Valeur de retour : condition

elementIsVisible(element: $selenium.WebElement)

Crée une condition qui attendra que l'élément donné devienne visible.

Valeur de retour : condition

elementIsSelected(element: $selenium.WebElement)

Crée une condition qui attendra que l'élément donné soit sélectionné.

Valeur de retour : condition

elementLocated(element: $selenium.Locator)

Crée une condition qui bouclera jusqu'à ce qu'un élément soit trouvé avec le localisateur donné.

Valeur de retour : condition

elementsLocated(element: $selenium.Locator)

Crée une condition qui bouclera jusqu'à ce qu'au moins un élément soit trouvé avec le localisateur donné.

Valeur de retour : condition

n

elementTextContains(element: $selenium.WebElement, substr: string)

Crée une condition qui attendra que le texte visible de l'élément donné contienne la sous-chaîne donnée.

Valeur de retour : condition

elementTextIs(element: $selenium.WebElement, text: string)

Sensible aux majuscules et minuscules. Crée une condition qui attendra que le texte visible de l'élément donné corresponde exactement au texte donné.

Valeur de retour : condition

n

elementTextMatches(element: $selenium.WebElement, regex: string)

Crée une condition qui attendra que le texte visible de l'élément donné corresponde à une expression régulière.

Valeur de retour : condition

stalenessOf(element: $selenium.WebElement)

Crée une condition qui attendra que l'élément donné devienne obsolète. Un élément est considéré comme obsolète une fois qu'il est supprimé du DOM ou qu'une nouvelle page a été chargée.

Valeur de retour : condition

titleContains(substr: string)

Crée une condition qui attendra que le titre de la page actuelle contienne la sous-chaîne donnée.

Valeur de retour : condition

titleIs(title: string)

Crée une condition qui attendra que le titre de la page actuelle corresponde à la valeur donnée.

Valeur de retour : condition

titleMatches(regex: string)

Crée une condition qui attendra que le titre de la page actuelle corresponde aux expressions régulières données.

Valeur de retour : condition

Exemple avancé

L'exemple suivant sépare le code en sections fonctionnelles : Constantes, dépendance, configuration, élément de page, fonctions et début de script. Il montre comment vous pouvez :

  • Configurez les délais d'attente pour minimiser les durées d'échec pour de meilleures performances.
  • Localisez les éléments par CSS ou ID.
  • Définir waitForAndFindElement.
  • Utilisez console.log() pour organiser le et identifier les script log problèmes liés aux échecs d’assertion ou aux délais d’expiration.
  • Gérez les erreurs avec un bloc try/catch qui génère un message d’erreur utile identifiant l’étape d’échec.
  • Permet l'utilisation du niveau supérieur await car nous exécutons l'intégralité du script dans une fonction asynchrone en coulisses.
/**
* Script Name: Advanced Example
* Author: New Relic
* Version: 1.6
*/
// -------------------- CONSTANTS
const SCRIPT_NAME = "Best Practices - Chrome 100" // name to record in script log
const IMPLICIT_TIMEOUT = 3000 // default implicit timeout is 10 seconds
const PAGE_LOAD_TIMEOUT = 60000 // default page load timeout is 60 seconds, fail early to prevent long duration timeouts
const SCRIPT_TIMEOUT = 20000 // default script timeout is 30 seconds
const USER_AGENT = "default" // set the user agent for Chrome
const PROTOCOL = "https://" // set the protocol
const USERNAME = "" // username:
const PASSWORD = "" // password@
const DOMAIN = "docs.newrelic.com" // your domain
const PATH = "/docs/new-relic-solutions/get-started/intro-new-relic/" // path to main page
const CHECK = "Get started with New Relic" // text to match on page
const AUTH = USERNAME + PASSWORD // could be stored as secure credentials
const MAIN_URL = PROTOCOL + AUTH + DOMAIN + PATH
// -------------------- DEPENDENCIES
const assert = require("assert")
// -------------------- CONFIGURATION
await $webDriver.manage().setTimeouts({
implicit: IMPLICIT_TIMEOUT, // sets element load timeout
pageLoad: PAGE_LOAD_TIMEOUT, // sets page load timeout
script: SCRIPT_TIMEOUT // sets script timeout
})
// -------------------- ELEMENTS
const By = $selenium.By
const loc = {
title: By.css("#gatsby-focus-wrapper > div.css-1uz5ayg > div > main > div > h1"),
start: [
{ step: 'signup', selector: By.id("sign-up-for-new-relic-if-you-havent-already") },
{ step: 'add', selector: By.id("add-your-data") },
{ step: 'explore', selector: By.id("explore-your-data") },
{ step: 'query', selector: By.id("query-your-data") },
{ step: 'dashboard', selector: By.id("set-up-a-dashboard") },
{ step: 'alerts', selector: By.id("configure-alerts") }
]
}
// -------------------- FUNCTIONS
// for backwards compatibility with legacy runtimes
async function waitForAndFindElement(locator, timeout) {
const element = await $webDriver.wait(
$selenium.until.elementLocated(locator),
timeout,
"Timed-out waiting for element to be located using: " + locator
)
await $webDriver.wait(
$selenium.until.elementIsVisible(element),
timeout,
"Timed-out waiting for element to be visible using ${element}"
)
return await $webDriver.findElement(locator)
}
// -------------------- START OF SCRIPT
// Start logging
const start_time = new Date()
console.log("Starting synthetics script: " + SCRIPT_NAME)
// confirm timeouts are set
const {implicit, pageLoad, script} = await $webDriver.manage().getTimeouts()
console.log("Timeouts are set to:")
console.log(" IMPLICIT: " + implicit / 1000 + "s")
console.log(" PAGE LOAD: " + pageLoad / 1000 + "s")
console.log(" SCRIPT: " + script / 1000 + "s")
// Setting User Agent is not then-able, so we do this first (if defined and not default)
if (USER_AGENT && 0 !== USER_AGENT.trim().length && USER_AGENT != "default") {
$headers.add("User-Agent", USER_AGENT)
console.log("Setting User-Agent to " + USER_AGENT)
}
// if an error happens at any step, script execution is halted and a failed result is returned
console.log("1. get: " + MAIN_URL)
await $webDriver.get(MAIN_URL)
console.log("2. waitForAndFindElement: " + loc.title)
const textBlock = await waitForAndFindElement(loc.title, IMPLICIT_TIMEOUT)
console.log("3. getText: " + CHECK)
const text1 = await textBlock.getText()
console.log("4. assert.equal: " + text1)
assert.equal(text1, CHECK, "title validation text not found")
console.log("5. takeScreenshot")
await $webDriver.takeScreenshot()
console.log("6. findElement")
loc.start.forEach(async function (nr, i) {
let n = i + 1
try{
// verify each asset has loaded
console.log(" " + n + ". " + nr.step + ": " + nr.selector)
await $webDriver.findElement(nr.selector)
}catch(exception){
console.error("Failure in Step 6." + n)
throw exception
}
})
// End logging
const end_time = new Date()
// Calculate the duration
const script_duration = (end_time - start_time) / 1000
// Log the times
console.log("Start time: " + start_time)
console.log("End time: " + end_time)
console.log("Duration: " + script_duration + "s")

Shadow DOM : Recherche d'éléments

L'environnement d'exécution prend également en charge l'accès aux éléments DOM fantômes à l'aide de la nouvelle méthode Sélénium Webdriver getShadowRoot().

  1. Utilisez findElement ou une fonction de niveau supérieur similaire pour trouver l’hôte fantôme. Il s’agit de l’élément sur lequel la racine d’ombre est montée.
  2. Utilisez la méthode getShadowRoot() sur l’élément trouvé à l’étape 1 pour obtenir la racine de l’ombre.
  3. En utilisant la racine d'ombre, vous pouvez désormais utiliser findElement ou des fonctions similaires pour rechercher des éléments à l'intérieur de la racine d'ombre. Si plusieurs niveaux de DOM fantôme sont utilisés, ces étapes devront être répétées jusqu'à ce que vous accédiez à l'objet racine fantôme qui contient l'élément avec lequel vous devez interagir.

Conseil

Chrome ne prend pas en charge l'utilisation du localisateur XPath à l'intérieur d'un objet racine fantôme. Utilisez une option de localisateur différente pour rechercher des éléments à l’intérieur d’un objet racine d’ombre.

Exemple:

// Find the shadow host
let myShadowHost = await $webDriver.findElement($selenium.By.id('exampleShadowHost'));
// Get the shadow root
let myShadowRoot = await myShadowHost.getShadowRoot();
// Interact with an element inside the shadow root
let el = await myShadowRoot.findElement($selenium.By.id('myButton'));
await el.click();
Droits d'auteur © 2025 New Relic Inc.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.