Aller au contenu principal

Bonnes pratiques des Parcours Utilisateurs

Gestion des iframes​

Vu la façon dont Experience Monitoring gĂšre la possible prĂ©sence d’iframes dans une page, un point important est Ă  prendre en compte dans ce cas de figure prĂ©cis. Si des iframes sont prĂ©sentes et que nous souhaitons manipuler des sĂ©lecteurs CSS, il est nĂ©cessaire de choisir des selecteurs CSS qui sont soit Ă  l'intĂ©rieur d'une iframe, soit Ă  l'extĂ©rieur, mais PAS des selecteurs qui "traversent" les 2 contextes, ce qui ne fonctionnera pas.

Voici un exemple explicatif, imaginons que le code HTML est architecturé comme ceci :

<div class="main">
<form id="my-form"></form>
<iframe>
<div class="frame-content">
<form id="my-form">
</form>
</div>
</iframe>
</div>
.main iframe

⇒ renvoie bien l'iframe

#my-form

⇒ renvoie le 1er my-form (celui qui n'est pas dans l'iframe)

.main iframe .frame-content

⇒ ne fonctionne pas, car .frame-content appartient au document de l'iframe

.frame-content #my-form

⇒renvoie bien le form qui se trouve Ă  l'intĂ©rieur de l'iframe cette fois-ci

iframe #my-form

⇒ ne fonctionne pas car #my-form est dĂ©ja dans le document de l'iframe.

Quand on veut un élément qui est à l'intérieur d'une iframe, on doit faire comme si TOUT ce qu'il y a en dehors du CONTENU de l'iframe n'existait pas.

Bonnes Pratiques​

PrivilĂ©gier les sĂ©lecteurs CSS au texte​

L'avantage des sĂ©lecteurs par texte est qu'il suffit de copier coller un texte de la page. L'inconvĂ©nient c'est que ce texte peut parfois ĂȘtre trouvĂ© ailleurs dans la page mĂȘme s'il n'est pas forcĂ©ment visible et donc ne pas fonctionner comme attendu.

Évidemment, plus le texte est spĂ©cifique, plus il a de chances d'ĂȘtre unique.

Attention : une phrase visible Ă  l’écran sur le site peut en rĂ©alitĂ© ĂȘtre fragmentĂ©e dans le code HTML. C’est systĂ©matiquement le cas typiquement si un ou plusieurs mots sont dans un style diffĂ©rent (bold ou autre couleur). Or dans son attente d’une chaine de caractĂšre spĂ©cifiĂ©e dans le scĂ©nario, Experience Monitoring ira rechercher Ă  l’intĂ©rieur du code HTML ⇒ en clair, si le texte est fractionnĂ©, il pourrait ne pas ĂȘtre trouvĂ©.

Pour ĂȘtre certain que la chaĂźne spĂ©cifiĂ©e comme Ă©lĂ©ment attendu dans Experience Monitoring est bien celle qui est prĂ©sente dans le code HTML, nous vous conseillons d’effectuer un “Clic-droit” puis “Inspecter dans le code HTML” pour copier/coller la chaine directement depuis le code HTML, ce qui Ă©vite toute erreur. Enfin, les espaces avant et aprĂšs le texte sont Ă©galement Ă  Ă©viter, il est prĂ©fĂ©rable de les supprimer manuellement.

SpĂ©cifier un sĂ©lecteur CSS pour les formulaires​

Si vous ne spĂ©cifiez pas de sĂ©lecteur CSS sur un formulaire, la sonde essaiera de remplir les champs correspondants partout dans la page. De mĂȘme sans sĂ©lecteur, l'envoi automatique soumettra le premier form trouvĂ©.

Mettre un sélecteur CSS permet donc de garantir que les bons champs soient remplis et que le formulaire soit correctement envoyé.

Nettoyer les classes utilitaires ou gĂ©nĂ©rĂ©es des sĂ©lecteurs CSS​

Lorsque vous utilisez la fonction "Copy CSS selector" de Chrome, le sĂ©lecteur gĂ©nĂ©rĂ© comporte gĂ©nĂ©ralement beaucoup de classes CSS (notation .nom-de-la-classe) dont la plupart peuvent ĂȘtre superflues. On pense notamment aux classes utilitaires (par exemple .alert-danger) ou aux classes gĂ©nĂ©rĂ©es par le framework (par exemple .menu-item-x823ds83sa9c). Ces classes n'apportent rien Ă  la prĂ©cision du sĂ©lecteur CSS, ce qui au mieux complique la maintenabilitĂ© (le moindre changement de classe utilitaire d'un Ă©lĂ©ment causera une erreur "Element not found") et pourra mĂȘme empĂȘcher le sĂ©lecteur de fonctionner (dans le cas des classes gĂ©nĂ©rĂ©es alĂ©atoirement Ă  chaque chargement de la page).

De la mĂȘme maniĂšre, il peut ĂȘtre pertinent d'assouplir la notion "d'enfant" directement dans les sĂ©lecteurs CSS (dĂ©crite par le symbole ">") car l'insertion d'un Ă©lĂ©ment entre les 2 demandera une modification du CSS sĂ©lecteur. Le retrait du symbole ">" conserve la notion de hiĂ©rarchie entre les Ă©lĂ©ments mais n'impose pas une relation "d'enfant" direct.

Éviter l'action "wait"​

L'action wait est le dernier recours lorsqu'il n'est pas possible d'ajouter une vérification sur l'action précédente.

Il est toujours préférable de choisir une vérification car elle ne demandera pas de micro-réglage de la durée pour conserver le parcours utilisateur stable elle n'impactera pas les mesures de l'interaction (le wait est décompté dans le Hero Time)

Il existe certains cas ou l'action wait est nécessaire car il n'est pas possible d'ajouter une vérification, par exemple :

  • La page ajoute des event handlers aprĂšs le onLoad : l'action souhaitĂ©e peut donc ĂȘtre dĂ©clenchĂ©e avant d'ĂȘtre prĂȘte Ă  ĂȘtre traitĂ©e par la page (c'est un bug du site mais cela peut se produire plus facilement avec la sonde puisque celle-ci est bien plus rapide qu'un utilisateur)
  • Une action modifie la page mais il n'est pas possible de mettre une vĂ©rification sur cette modification. Par exemple si la modification concerne un attribut autre que "id" ou "class", qui n'est donc pas monitorĂ©, on pourra recourir au wait (mais il conviendra de se demander d'abord si cette action Ă  un quelconque intĂ©rĂȘt)

Pour éviter d'impacter les mesures, il est recommandé dans la mesure du possible d'isoler l'action wait dans une interaction à part et non mesurée (NB: les vérifications ne sont pas obligatoires pour les interactions non mesurées).

Éviter le random​

Le random peut-ĂȘtre utile pour les tests de charge notamment mais peut aussi introduire des variations de performance qui rendront alors les mesures difficilement comparables.

Il est préférable de choisir une cible fixe ou bien de sélectionner systématiquement le premier élément. Cela permet aussi de mettre des vérifications plus précises, spécifique à la page visitée.

Choisir intelligemment les Ă©lĂ©ments Ă  vĂ©rifier​

Les vĂ©rifications servent Ă  mesurer le Hero Time — un indicateur clĂ© de la perception de performance par l'utilisateur. Il est donc essentiel de sĂ©lectionner des Ă©lĂ©ments rĂ©ellement reprĂ©sentatifs de l'expĂ©rience utilisateur, tout en Ă©vitant les vĂ©rifications redondantes qui alourdiraient inutilement la configuration.

Notre recommandation : identifier 2 Ă  3 Ă©lĂ©ments clĂ©s (par exemple, la plus grande image ou background-image, un texte structurant comme le titre principal, et le call-to-action principal). Cela permet d’avoir une mesure pertinente et maintenable, sans surcharger le scĂ©nario avec des vĂ©rifications superflues.

L'action "ExĂ©cuter un script"​

L'utilisation d'un script n'est recommandée que si vous n'avez pas eu de résultats avec les autres actions disponibles dans la configuration de parcours utilisateurs. Notez que le script garantit la réalisation d'une action mais pas son résultat. Par conséquent, vous devez ajouter au moins une vérification aprÚs chaque script.

Évitez d'utiliser un script pour remplacer une vĂ©rification ou pour cacher une instabilitĂ© du site.

Utilisez des scripts courts, simples et avec des spécifications précises.

Ajouter des vĂ©rifications sur les cibles des actions​

Lorsqu'une action cible un texte ou un sĂ©lecteur CSS, il est bĂ©nĂ©fique d'ajouter une vĂ©rification sur cet Ă©lĂ©ment lors de l'action prĂ©cĂ©dente pour s'assurer que la cible soit bien apparue (et la cible est de-facto un Ă©lĂ©ment important qui mĂ©rite d'ĂȘtre comptĂ© dans le Hero Time).

Exemple : La 4e action de mon parcours est Cliquer sur le bouton 'Ajouter au panier'. J'ajoute donc une vérification dans ma 3e action de type Le text "Ajouter au panier" a été inséré dans la page.

Ajouter une vĂ©rification de navigation pour les interactions qui naviguent​

La vĂ©rification de navigation permet non seulement d'inclure le temps de la requĂȘte de navigation dans le Hero Time mais Ă©galement:

  • D'en vĂ©rifier le code de retour
  • D'attendre (sans le compter dans le Hero Time) l'Ă©vĂšnement de load de la page (ce qui permet aussi de rĂ©cupĂ©rer un speedIndex)

Ajouter des vĂ©rifications sur les requĂȘtes AJAX importantes​

Cela permet d'une part de valider le code de retour de l'appel AJAX, mais aussi de s'assurer que le Hero Time est bien représentatif des éléments les plus importants de la page.

Nettoyer les vĂ©rification de requĂȘte des paramĂštres superflus​

Certaines requĂȘtes incluent des paramĂštres qui peuvent varier :

  • soit de temps Ă  autre, ex: ID produit sur une Ă©tape dynamique
  • soit systĂ©matiquement (ex: bypass de cache de type "?_=<timestamp>")

Ce type de paramĂštres diminue la maintenabilitĂ© (voire peut causer des erreurs en cas de paramĂštre qui change Ă  chaque fois). L'idĂ©al est de n'inclure que les paramĂštres qui sont nĂ©cessaires pour identifier spĂ©cifiquement la requĂȘte de la page, auquel cas la sonde ne sera pas sensible aux paramĂštres supplĂ©mentaires qui pourraient ĂȘtre prĂ©sents

Exemple : si nous spĂ©cifions comme requĂȘte attendue “*/addToCart?qty=1”, alors toutes les requĂȘtes finissant par “/addToCart” vont matcher si le paramĂštre qty=1 est prĂ©sent, y compris si d’autres paramĂštres sont prĂ©sents (avant ou aprĂšs dans la chaine de l’URL).

Filtrer certains tags 3rd party (mais pas trop)​

Les sites web ont souvent de nombreuses solutions tierces intĂ©grĂ©es Ă  leur page. Il est souvent de bon usage de “blacklister” les trackers de solutions d'analytics pour Ă©viter de fausser les stats de l’équipe digital marketing.

Pour rĂ©pondre Ă  cette problĂ©matique, Experience Monitoring contient une blacklist par dĂ©faut configurĂ©e dans tout nouveau scĂ©nario. Cette blacklist filtre par exemple par dĂ©faut les requĂȘtes vers Google Analytics, mais d’autres outils de tracking spĂ©cifique au site peuvent encore passer. Il peut donc ĂȘtre judicieux d’évoquer ce point avec l’équipe marketing digital pour s’assurer qu’il n’y a pas de contre-indication Ă  ce qu'Experience Monitoring requĂȘte leurs autres tags.

A garder en tĂȘte Ă©galement que certains tags 3rd party sont nĂ©cessaires au bon fonctionnement de la page. Dans ce cas il sera donc important de ne pas les bloquer.

Protips sur l’usage des sĂ©lecteurs CSS​

Rendre vos sĂ©lecteurs CSS robustes et fiables​

Pour garantir la fiabilitĂ© des scĂ©narios de monitoring, il est essentiel d’utiliser des sĂ©lecteurs CSS Ă  la fois explicites et rĂ©silients aux Ă©volutions du code HTML. Voici les bonnes pratiques Ă  suivre :

1. Préférez les identifiants uniques ou les classes explicites

Un sĂ©lecteur comme div.modal-add-to-cart est prĂ©fĂ©rable Ă  un gĂ©nĂ©rique div.w-full, car il est beaucoup plus spĂ©cifique Ă  une fonctionnalitĂ© mĂ©tier. Les classes purement stylistiques (souvent courtes, gĂ©nĂ©riques ou issues de frameworks CSS) risquent d’ĂȘtre rĂ©utilisĂ©es ailleurs sur la page et de provoquer des collisions.

RĂšgle simple : plus un nom est lisible et fonctionnel, plus il est fiable.

2. Utilisez les identifiants (ID) quand ils sont disponibles

Les sĂ©lecteurs basĂ©s sur un id HTML (#add-to-cart-btn) sont souvent les plus sĂ»rs car ils sont censĂ©s ĂȘtre uniques sur la page. Si le bouton ou l’élĂ©ment que vous ciblez possĂšde un ID, privilĂ©giez-le.

3. DĂ©sambigĂŒisez avec des sĂ©lecteurs "en cascade"

Lorsque plusieurs Ă©lĂ©ments partagent le mĂȘme sĂ©lecteur (ex : plusieurs button.qty), prĂ©cisez leur contexte pour Ă©viter les erreurs. Par exemple :

div.modal-add-to-cart button.qty

Ce sélecteur ne cible que les boutons .qty présents dans une modale spécifique. Cela permet de restreindre la recherche à une zone précise du DOM, rendant votre scénario plus stable face aux évolutions.

4. Favorisez les sélecteurs hiérarchiques avec un ou plusieurs espaces

Un sĂ©lecteur CSS comme section.product-detail div.buy-zone button.cta offre un bon compromis entre spĂ©cificitĂ© et flexibilitĂ©. Il reste robuste mĂȘme si un nouveau niveau de balise est insĂ©rĂ© dans le HTML (ce qui casserait un sĂ©lecteur trop strict ou exact).

Exemples utiles de sĂ©lecteur CSS avancĂ©s​

Voici ici quelques exemples de sélecteur CSS avancés qui peuvent se révéler trÚs utiles dans certaines situations :

:not()

Exemple 1 : .counter.qty:not(.empty) : Class .qty sans la class empty (<div class="qty">)

L'usage du :not() est particuliÚrement utile dans l'exemple ci-dessus pour indiquer que le panier n'est plus vide. On se rend d'ailleurs compte que le :not(...) peut servir à détecter la disparition d'une classe sur un élément ! Il faut alors bien penser le test de maniÚre inversée.

Exemple 2 :

Un autre exemple assez fréquent, il s'agit d'un bouton qui est grisé au départ et possÚde une classe ".disabled". Disons que le bouton a comme ID "product-addtocart-button". Dans le code HTML initial de la page, le bouton va ressembler à ça :

<button id="product-addtocart-button" class="add-to-cart **disabled**">

****Suite à une action sur le site (ex: choix d'une taille d'un produit), le bouton va se dégriser en se voyant supprimer sa classe "disabled", il devient :

<button id="product-addtocart-button" class="add-to-cart">

On peut alors insérer un test dans le scénario qui vérifie l'apparition du sélecteur CSS suivant : #product-addtocart-button:not(.disabled)

En effet, si on teste cette chaine avec la console de Chrome, alors que le bouton est grisé on voit que le sélecteur CSS ne renvoi rien. Par contre, dÚs que la taille du produit a été sélectionnée et que la classe .disabled disparait, alors le sélecteur CSS va renvoyer l'objet. Au sens du scénario Experience Monitoring, cet élément #product-addtocart-button:not(.disabled) apparait ! C'est donc un parfait test pour vérifier que le bouton d'ajout au panier est désormais dé-grisé, avant d'envisager de le cliquer.

Exemple 3 : La formulation :not() peut s'appliquer à d'autres éléments que les classes. En l'occurence, Experience Monitoring surveille également l'apparition et la disparition des paramÚtres "disabled" ou "disable" au sein des objets du DOM, car il est fréquent que l'aspect "grisé" d'un bouton soit stocké sous forme d'un paramÚtre et non d'une classe (attention à ces subtilités qui sont spécifique à chaque site !). Vous pouvez donc avoir un bouton qui ressemble à ça :

<button id="product-addtocart-button" class="add-to-cart" **disabled**>

Vous remarquez ici que le disabled est extérieur aux classes, c'est un autre "paramÚtre". Pour constater la disparition de ce paramÚtre "disabled", on peut donc attendre l'apparition de la chaine CSS suivante :

#product-addtocart-button:not([disabled])

Attention, ce paramĂštre peut ĂȘtre Ă©galement rempli avec une chaine, comme ceci :

<button id="product-addtocart-button" class="add-to-cart" **disabled="disabled"**>

Si c'est le cas, on peut imaginer que le site ne supprime pas le paramÚtre, mais le remplisse avec une chaine "false" quand il se dégrise, comme ceci :

<button id="product-addtocart-button" class="add-to-cart" **disabled="false"**>

Auquel cas, il conviendra de bien préciser la valeur du paramÚtre dans le not() dans notre chaine attendue comme ceci :

#product-addtocart-button:not([disabled="disabled"])

Dans ce cas, le sĂ©lecteur CSS va "apparaitre" dans les cas oĂč le paramĂštre "disabled" disparaitrait complĂštement OU BIEN si sa valeur devient n'importe quoi d'autre que "disabled". Dans le cas d'un passage Ă  un Ă©tat disabled="false", alors le chaine sera bien vĂ©rifiĂ©e et notre objectif de scĂ©nario rempli. a[href="https://www.xxxxx.com/"]

Ce sĂ©lecteur permet de dire : je veux l'Ă©lĂ©ment cliquable ("a") dont l'URL de destination est "https://www.xxxxx.com/". Cela peut ĂȘtre utile dans certains cas, mais attention tout de mĂȘme, car utiliser cette formule revient un peu Ă  naviguer sur une URL spĂ©cifique. En effet, si l'URL de la page de destination devait ĂȘtre ne serait-ce que trĂšs lĂ©gĂšrement modifiĂ©e, alors le scĂ©nario sera en Ă©chec. Quand les boutons ont des classes ou des ID bien explicites, il est prĂ©fĂ©rable de les utiliser pour rĂ©aliser les actions clics, ainsi en cas de lĂ©ger changement d'URL, le scĂ©nario Experience Monitoring va s'adapter et faire sa navigation toujours correctement comme le ferait un internaute. Notre recommandation est d'utiliser cette formule pour :

  • aller sur des URLs dont la formulation n'est pas amenĂ© a changer, exemple : "www.site.com/checkout/cart/".
  • ou bien, quand les ID, classes et autres Ă©lĂ©ments de la page rendent la sĂ©lection du bon lien trop incertaine. Dans ce cas il y a un compromis Ă  faire. Exemple, si vous souhaitez cliquer sur une catĂ©gorie spĂ©cifique au sein d'un menu et que votre sĂ©lecteur CSS revient Ă  cliquer sur le 8Ăšme Ă©lĂ©ment d'une liste... dites-vous qu'il est probable qu'un micro-changement sur le site dĂ©cale votre clic et envoi votre scĂ©nario sur la mauvaise page. Dans ce cas, n'hĂ©sitez pas Ă  utiliser la formulation a[href="https://www.xxxxx.com/"].

button[data-role="change-store"]

Il est possible de désigner des objets en fonction des paramÚtres spécifiques qui les composent. Cette chaine permettra de cliquer sur l'élément de ce type : <button data-role="change-store">

Attention nĂ©anmoins, il est important de savoir qu'Experience Monitoring ne vĂ©rifie pas systĂ©matiquement les changements d'Ă©tats des paramĂštres des objets de la page aprĂšs avoir rĂ©cupĂ©rĂ© le code HTML initial. En effet, un compromis a du ĂȘtre fait en matiĂšre de performance lors de l'exĂ©cution des scĂ©narios, et il a Ă©tĂ© choisi de surveiller les changements suivants :

  • changement sur les classes (apparition, disparition)
  • changement sur les paramĂštres "disabled" ou "disable"

En dehors de ces Ă©lĂ©ments, les changements peuvent ne pas ĂȘtre dĂ©tectĂ©s ! Dans l'exemple ci-dessus, si suite Ă  l'exĂ©cution d'un Javascript dans la page, le bouton button[data-role="change-store"] devient button[data-role="checkout"] alors il ne faudra pas utiliser ce changement dans une vĂ©rification.

Cette expression est donc rĂ©servĂ©e aux interactions avec des objets dont les paramĂštres n'ont pas changĂ© depuis le chargement du code HTML initial. Si vous avez un doute sur le fait que le paramĂštre soit bien prĂ©sent dans le code HTML initial, vous pouvez vous rendre dans la console de Chrome, dans l'onglet Network, puis cliquer sur la toute premiĂšre requĂȘte de la page, puis cliquer dans l'onglet "Response". Vous verrez alors s'afficher le code HTML initial, tel qu'il a Ă©tĂ© transmis Ă  votre navigateur avant d'Ă©ventuelles modifications rĂ©alisĂ©s par le code javascript. Un "CTRL-F" pour rechercher l'Ă©lĂ©ment vous amĂšnera directement au bon endroit.

Il peut ĂȘtre par exemple tentant de vouloir dĂ©tecter un changement sur le paramĂštre "display" (exemple : un objet qui mais ce paramĂštre malheureusement beaucoup trop de changement pour ĂȘtre surveillĂ© sans une trĂšs forte dĂ©gradation des performances.

button[id^="checkout-"]

Ce sélecteur permet de dire "je souhaite récupérer les boutons de la page, dont l'ID commence par "checkout-". Cela permet par exemple de récupérer un bouton de ce type : <button id="checkout-920284853">

On aurait pu mettre dans le scénario le sélecteur CSS "button#checkout-920284853", mais voyant le trÚs grand chiffre qui figure sur la fin de cette ID, on peut largement supposer qu'il s'agit d'un paramÚtre généré automatiquement. La mention d'un objet comprenant un grand chiffre ou une chaine de caractÚre ayant l'air aléatoire est à éviter, car si ce chiffre est re-généré au moment d'une nouvelle mise en production sur le site, le scénario Experience Monitoring se mettra en erreur. Par exemple, si suite à la mise en production le bouton devient <button id="checkout-946202742">, alors notre chaine de sélection ne correspondra plus et ne trouvera pas le bouton. A l'inverse, si nous avons utilisé la chaine button[id^="checkout-"] alors le scénario continuera d'identifier le bon bouton avec son chiffre pourtant modifié. Ces subtilités sont importantes pour éviter d'avoir à mener des maintenances trop récurrentes sur un scénario. Il y a une balance à trouver entre :

  • ĂȘtre suffisamment restrictif dans le scĂ©nario pour dĂ©tecter les erreurs
  • mais en mĂȘme temps savoir insĂ©rer un peu de souplesse dans les sĂ©lecteurs CSS utilisĂ©s, les requĂȘtes et les chaines vĂ©rifiĂ©es dans chaque action, afin que le scĂ©nario continue de tourner correctement lors de changement mineurs sur le site.

a.action-button,a.action-checkout

La virgule au milieu d'un sĂ©lecteur CSS dans l'exemple ci-dessus veut dire : "je veux l'objet 'a' qui a la classe "action-button" OU BIEN (dans le cas oĂč le premier n'existe pas) l'objet 'a' qui a la classe "action-checkout".

Les possibilités via ce caractÚre "," sont assez puissantes, car on peut tout à fait l'utiliser pour créer une condition dans Experience Monitoring.

Exemple : j'ai un site Ecommerce à surveiller, et je créé un scénario assez classique qui, depuis la homepage va cliquer sur la premiÚre catégorie disponible, puis sur le premier produit de cette catégorie pour ensuite faire un ajout au panier. Il peut arriver assez souvent que certains produits du catalogue soit "configurables" et d'autres non. Configurable veut dire qu'il y a une option à choisir avant de pouvoir ajouter au panier, des options comme :

  • une pointure pour une paire de chaussures
  • une couleur- un motif de tissu
  • etc. Sur certains sites, si l'option n'a pas Ă©tĂ© choisie (cliquĂ©e) par l'utilisateur alors le bouton d'ajout au panier va rester grisĂ©. La difficultĂ© ici sera donc de faire un scĂ©nario adaptatif, qui sait gĂ©rer plusieurs types de produits distincts qui ne sont pas configurables de la mĂȘme maniĂšre, c'est lĂ  que notre "," devient une prĂ©cieuse arme ;-)

Exemple, pour cliquer sur la premiÚre couleur proposée OU sur la premiÚre pointure proposée OU le premier motif proposé, je vais pouvoir faire un clic sur un sélecteur qui ressemble à ça :

select.choose-color,select.choose-size,select.choose-pattern

Dans ce cas, Experience Monitoring va cliquer sur le premier élément existant dans l'ordre de la gauche vers la droite. De cette façon, qu'il faille configurer le produit par sa couleur, sa taille ou son motif, Experience Monitoring saura alors cliquer celui qui est existant sur la page, ce qui va dégriser le bouton d'ajout au panier. Ceci est un bon exemple de scénario adaptatif.

Pour aller plus loin​

Comme vous avez pu le voir par ces exemples, les sélecteurs CSS regorgent de fonctions, qui vont donner une immense flexibilité aux scénarios créés dans Experience Monitoring.

Nous avons regroupé ci-dessus les cas d'utilisation les plus fréquents, mais la liste est non exhaustive. Pour aller plus loin, n'hésitez pas à consulter la "bible", le site w3schools.com :D

https://www.w3schools.com/cssref/css_selectors.asp