Selenium 4 vs Selenium 3 : ce qui change

Voici tout ce que vous devez savoir sur 👉🏼 Selenium 4 vs Selenium 3 !

Selenium 4, la dernière version de Selenium, est actuellement disponible dans la version Alpha. Il y a eu beaucoup de buzz autour de la sortie des fonctionnalités de Selenium 4 Alpha car il regorge de propriétés essentielles telles que les localisateurs relatifs, l’amélioration de l’IDE Selenium et la conception améliorée de la grille de Selenium. Cette dernière introduit un « mode entièrement distribué » pour les tests automatisés du Selenium. Outre ces changements visibles, le changement majeur « sous le capot » (ou architectural) est que les API WebDriver dans Selenium 4 suivent le W3C (World Wide Web Consortium) dans sa mise en œuvre.

selenium 4 vs selenium 3

Voici quelques questions qui pourraient vous venir à l’esprit concernant la normalisation des API Selenium WebDriver par le W3C dans Selenium 4 :

  • Quelles sont les différentes fonctionnalités de Selenium 4 Alpha ?
  • Comment Selenium 4 est-il devenu un standard du W3C sur la communauté Selenium ?
  • Quels seraient les avantages significatifs du protocole W3C WebDriver ?
  • Ce changement aura-t-il un impact sur les scénarios de test qui fonctionnaient de manière transparente sur Selenium 3 ?
  • Avons-nous besoin de modifier l’implémentation testée sur Selenium 3 pour prendre en charge les API Selenium WebDriver standardisées du W3C dans Selenium 4 ?

Cet article aiderait à répondre à ces questions persistantes, alors que nous approfondirons ce que signifie la conformité W3C dans Selenium 4 pour les utilisateurs du framework Selenium. Vous pouvez également consulter notre article Commencer avec Selenium WebDriver”.

TABLE DES MATIÈRES

  • Introduction : WebDriver dans Selenium 4
  • Communication entre le WebDriver et le navigateur
  • Le protocole JSON Wire
  • Protocole WebDriver W3C dans Selenium 4
  • Avantages majeurs du protocole WebDriver W3C
  • Protocole filaire JSON et protocole WebDriver W3C
  • Impact du protocole WebDriver W3C sur une implémentation existante
  • Impact du protocole WebDriver W3C sur les tests d’automatisation exécutés sur LambdaTest

1. Introduction : WebDriver dans Selenium 4

WebDriver est une interface de contrôle à distance qui permet l’introspection et le contrôle des agents utilisateurs. Il fournit une plate-forme et un protocole filaire indépendant de la langue afin que les programmes de processus puissent instruire à distance le comportement des navigateurs Web.

Cette interface fournit un ensemble d’interfaces qui aident à contrôler le comportement d’un agent utilisateur et à découvrir et manipuler les éléments DOM sur des pages Web (ou des documents). Outre Selenium, les API WebDriver sont utilisées dans d’autres outils d’automatisation comme Appium (principalement utilisés pour les tests Web des applications mobiles).

Un support stable pour le protocole W3C a été ajouté dans Selenium v3.8 à Selenium v3.11, comme le montrent les correctifs liés au W3C dans la dernière version stable de Selenium (c’est-à-dire Selenium 3.141.59). Le projet Selenium prévoyait de migrer vers un protocole entièrement nouveau : le W3C. La même chose se passe dans Selenium 4.

Tous les navigateurs récents (par exemple : Chrome, Firefox, Safari, etc.), y compris Internet Explorer, sont considérés comme conformes au W3C. Avec Selenium 4, vous n’aurez peut-être plus besoin d’ajouter des « modifications » dans le script de test pour le faire fonctionner sur différents navigateurs, car tout (c’est-à-dire les navigateurs et les API WebDriver) fonctionnera dans le protocole standard W3C.

Avec WebDriver devenant complètement normalisé W3C, vous pouvez désormais l’utiliser dans différents frameworks sans problèmes de compatibilité.

2. Communication entre le WebDriver et le navigateur

Dans Selenium, le WebDriver propose un ensemble d’API qui vous permet de découvrir et d’effectuer des opérations pertinentes (par exemple, cliquer, sendKeys, etc.) sur les éléments Web présents dans le document (ou la page). Une connexion sécurisée avec le navigateur Web est établie à l’aide des « pilotes de navigateur » correspondants. Le navigateur est le point final de l’exécution.

Au fur et à mesure de la communication entre le navigateur Web et Selenium WebDriver, les deux parties doivent suivre un ensemble de règles (ou protocole) compréhensibles. Avec Selenium 4, le WebDriver et le navigateur suivent le même protocole (i.e., W3C), offrant de nombreux avantages par rapport au WebDriver utilisé dans les versions antérieures à Selenium 4.

3. Le protocole JSON Wire

3.1 Le protocole Json Wire dans Selenium 4

Pour les versions de Selenium antérieures à Selenium 4, le protocole JSON Wire était utilisé pour communiquer avec le navigateur Web depuis l’extrémité locale. Comme les bibliothèques du client Selenium (c’est-à-dire le client) utilisent le protocole JSON et que le navigateur Web utilise le protocole W3C, le codage et le décodage de l’API ont été impliqués dans l’ensemble du processus.

Schéma explicatif pour le protocole JSON Wire dans Selenium 4

3.2 Protocole JSON Wire dans Selenium WebDriver

« WebDriver W3C » est le protocole nouvellement introduit dans Selenium 4. Il a reçu l’approbation du W3C (World Wide Web Consortium), la communauté qui travaille sur le développement de standards Web. W3C Working Draft et W3C Editor’s Draft sont d’excellentes ressources pour garder un œil sur la progression du protocole WebDriver W3C.

Le protocole WebDriver W3C remplace l’ancien protocole JSON Wire dans Selenium 4. Cela signifie essentiellement que vous n’avez plus besoin d’encoder et de décoder la demande d’API à l’aide du protocole W3C, et les tests peuvent communiquer directement avec le navigateur Web. Les informations ne seront pas transférées par l’envoi et la réception de requêtes HTTP et de réponses HTTP, respectivement.

3.3 Protocole WebDriver W3C dans Selenium 4

« WebDriver W3C » est le protocole nouvellement introduit dans Selenium 4. Il a reçu l’approbation du W3C (World Wide Web Consortium), la communauté qui travaille sur le développement de standards Web. W3C Working Draft et W3C Editor’s Draft sont d’excellentes ressources pour garder un œil sur la progression du protocole WebDriver W3C.

Dans Selenium 4, le protocole WebDriver W3C remplace l’ancien protocole JSON Wire. Cela signifie essentiellement que vous n’avez plus besoin d’encoder et de décoder la demande d’API à l’aide du protocole W3C, et les tests peuvent communiquer directement avec le navigateur Web. Les informations ne seront pas transférées par l’envoi et la réception de requêtes HTTP et de réponses HTTP, respectivement.

Schéma Protocole WebDriver W3C dans Selenium 4

3.4 Protocole WebDriver W3C

Comme le montre l’architecture du protocole WebDriver W3C, il existe un échange d’informations direct entre le client et le serveur, sans avoir besoin du protocole JSON Wire. Comme Selenium WebDriver et les navigateurs Web utilisent le même protocole, les tests Selenium automatisés exécuteront des tests de manière plus cohérente entre les différents navigateurs. La fragilité de l’automatisation Web peut être considérablement réduite si un protocole standard est utilisé.

Avec le protocole WebDriver W3C en action, les testeurs d’automatisation n’auraient plus besoin de modifier les scripts de test d’automatisation pour qu’ils fonctionnent sur différents navigateurs Web. La stabilité et la cohérence des tests sont les deux avantages significatifs du protocole WebDriver W3C dans Selenium 4.

4. Avantages majeurs du protocole WebDriver W3C

L’introduction du protocole WebDriver W3C offre plusieurs avantages :

  • Les tests automatisés de Selenium s’exécuteront de manière plus cohérente entre les navigateurs que les navigateurs, et Selenium WebDriver utilise le même protocole.
  • Avec le protocole WebDriver W3C, les tests Selenium automatisés seront moins floconneux et plus stables. La stabilité dans les tests est une raison majeure pour passer au Selenium 4.
  • L’API Actions du protocole WebDriver W3C est plus riche que celle du protocole filaire JSON. L’API Actions a été repensée pour se conformer à la spécification WebDriver. Les API d’action vous permettraient désormais d’effectuer des actions « multi-touch », un zoom avant, un zoom arrière, en appuyant simultanément sur deux touches, et plus encore. Par exemple, la séquence Pinch-zoom dans le protocole W3C est représentée par une séquence d’actions composée de trois graduations et de dispositifs à deux pointeurs de type tactile.
  • La standardisation du W3C ouvre des opportunités de promotion de la compatibilité au-delà des implémentations de l’API WebDriver.
  • Les sites Web conformes au W3C contribuent à réduire les efforts de maintenance, car un code plus propre améliore la lisibilité.

Cependant, la prise en charge native d’Opera et de PhantomJS est supprimée car les implémentations WebDriver pour ces navigateurs ne sont plus en cours de développement. L’option de secours pour les utilisateurs d’Opera est le navigateur Chrome, car le navigateur Opera est basé sur Chromium. Pour PhantomJS, les utilisateurs doivent utiliser Firefox ou Chrome en mode « sans tête ». Le protocole WebDriver du W3C est l’une des principales raisons de passer à Selenium 4 !

5. Protocole filaire JSON et protocole WebDriver W3C

Le protocole JSON Wire est légèrement différent du protocole WebDriver W3C. Si vous utilisez Selenium 3.141.59 – la dernière version stable de Selenium, vous utilisez peut-être déjà le nouveau protocole.

Protocole filaire JSON et protocole WebDriver W3C image 3

Le JSON Wire Protocol sera définitivement retiré dans Selenium 4. Le Selenium Changelog est une excellente ressource pour suivre les changements dans Selenium WebDriver du point de vue de la conformité W3C.

La principale différence réside dans la manière dont une nouvelle session est créée et comment les interactions des éléments sont effectuées à l’aide de l’API Actions. Un coup d’œil au document en cours d’exécution de WebDriver W3C et à la documentation désormais obsolète du protocole JSON Wire Protocol montre qu’il y a des changements dans les codes d’erreur, les structures de données et les codes d’état de réponse.

Du point de vue d’un développeur ou d’un testeur d’automatisation, dans les scénarios idéaux, aucune modification n’est requise dans les scripts de test existants pour le faire fonctionner avec le protocole WebDriver W3C.

Voici une brève liste des changements de nom à travers les fonctionnalités, l’objet JSON proxy, les codes d’état de réponse, les codes d’erreur, etc. qui accompagnent la conformité W3C dans Selenium 4 :

PROTOCOLE DE FIL JSON PROTOCOLE WEBDRIVER W3C DESCRIPTION
version browserVersion Version du navigateur, qui fait partie des fonctionnalités du navigateur.
Plate-forme platformName Plate-forme ou système d’exploitation sur lequel le navigateur fonctionnera.
noproxy noProxy Répertoriez l’adresse pour laquelle le proxy doit être contourné lorsque proxyType est défini sur manuel.
Commande inconnue commande inconnue Les demandes sont introuvables ou la demande a été reçue à l’aide d’une méthode HTTP qui n’est pas prise en charge par la ressource mappée.
NoSuchFrame pas de tel cadre La trame souhaitée sur laquelle un basculement est effectué n’est pas trouvée.
NoSuchElement aucun élément de ce type Les éléments Web ne sont pas présents sur la page.
StaleElementRéférence référence d’élément périmé La commande a échoué car l’élément Web ne fait plus partie du DOM.
ElementIsNotSelectable élément non sélectionnable L’opération de sélection ne peut pas être effectuée sur l’élément Web souhaité.
JavaScriptError erreur javascript Erreur rencontrée lors de l’exécution du JavaScript fourni par l’utilisateur.
Temps libre temps libre Impossible de terminer l’opération avant l’expiration du délai.
UnableToSetCookie impossible de définir un cookie Les demandes de définition de la valeur du cookie ne peuvent pas être satisfaites.
NoSuchWindow pas de telle fenêtre La commande de basculement vers la fenêtre souhaitée ne peut pas être satisfaite, car la fenêtre est introuvable.
InvalidCookieDomain domaine de cookie invalide Tentative illégale de création d’un cookie sous un domaine différent de celui de la page actuelle.
UnexpectedAlertOpen alerte inattendue ouverte La boîte de dialogue modale est ouverte, bloquant ainsi l’opération en cours.
ScriptTimeout délai d’expiration du script Le script ne peut pas se terminer avant l’expiration du délai.
InvalidElementCoordinates coordonnées invalides Les coordonnées fournies à l’opération d’interactions ne sont pas valides.
SessionNotCreatedException session non créée Impossible de créer une nouvelle session.
NoAlertOpenError pas une telle alerte Tentative d’opération sur une boîte de dialogue modale lorsqu’elle n’est pas ouverte.
MoveTargetOutOfBounds déplacer la cible hors des limites La cible fournie à l’action de déplacement est hors limites.
trace de la pile trace de la pile Un tableau d’objets JSON qui décrivent la trace de pile pour l’exception levée lorsque la commande souhaitée a échoué.
InvalidSelector sélecteur invalide L’argument était un sélecteur non valide (XPath, CSS, nom, etc.)

La spécification W3C pour WebDriver (et maintenant obsolète WebDriver Wire Protocol) est une excellente référence pour garder un œil sur les différences entre les deux protocoles. La question de suivi qui se pose après avoir examiné les divergences entre le protocole JSON Wire Protocol et le protocole WebDriver W3C est « Quel est l’impact du protocole WebDriver W3C sur l’implémentation de l’automatisation des tests existante » ?

6. Impact du protocole WebDriver W3C sur une implémentation existante

Le protocole WebDriver W3C fait partie de Selenium depuis Selenium v3.8, mais l’implémentation de Selenium WebDriver était rétro compatible (avec le protocole JSON Wire). Cependant, le protocole JSON Wire sera complètement éliminé dans Selenium 4. Cela signifie essentiellement que vous utilisez peut-être déjà le protocole WebDriver W3 même si les tests sont exécutés sur une grille Selenium 3. La dernière version stable de Selenium 3 (c’est-à-dire Selenium 3.141.59) prend déjà en charge le protocole W3C. La même chose est évidente d’après l’historique des versions de Selenium 3.141.59 .

Les changements sont transparents pour les développeurs et les testeurs d’automatisation du framework Selenium. Les changements de niveau de protocole filaire sont censés améliorer le niveau d’API en raison des tests qui seraient moins floconneux et uniformes entre les différents navigateurs (et versions).
Par exemple, ChromeDriver version 75 et suivantes s’exécute en mode conforme à la norme W3C par défaut. Les développeurs et les utilisateurs du framework Selenium avaient rencontré peu de problèmes avec leurs tests, mais le problème a été résolu après la mise à jour du ChromeDriver respectif.

Impact du protocole WebDriver W3C sur une implémentation existante

Voici les captures d’écran des tests Selenium automatisés à l’aide de ChromeDriver (version 86.0) exécutés sur une grille Selenium locale (version 3.141.59). Par défaut, il utilise le protocole WebDriver W3C pour la communication.

Impact W3C sur les tests Selenium

7. Impact du protocole WebDriver W3C sur les tests d’automatisation exécutés sur LambdaTest

Pour les utilisateurs de la grille Selenium basée sur le cloud, facilitée par LambdaTest, la migration de Selenium vers le protocole WebDriver W3C ne devrait avoir aucun impact. Aucune modification n’est requise dans les scripts de test automatisés Selenium existants, car LambdaTest choisit le protocole Selenium WebDriver approprié pour fonctionner sans tracas.

Voici une capture d’écran d’un test d’automatisation Selenium exécuté sur le Selenium Grid basé sur le cloud par LambdaTest :

Impact du protocole WebDriver W3C sur les tests d'automatisation exécutés sur LambdaTest

Comme le montre la capture d’écran, le protocole WebDriver W3C a été utilisé pour les tests Selenium automatisés.

8. Conclusion sur la conformité de Selenium 4 au W3C

Le protocole WebDriver W3C offre de nombreux avantages par rapport au protocole JSON Wire. Tous les navigateurs Web modernes utilisent également le protocole W3C, évitant ainsi le besoin d’encodage et de décodage API dans Selenium 4 (qui utilise le protocole WebDriver W3C). Les problèmes auxquels les testeurs d’automatisation ont été confrontés lors du portage d’un code Selenium d’un navigateur Web à un autre seront de l’histoire ancienne avec Selenium 4.

Les utilisateurs de Selenium peuvent s’attendre à des tests d’automatisation Selenium moins floconneux, plus cohérents et plus stables avec le protocole WebDriver W3C dans Selenium 4. Bien que JSON Wire Protocol se retire dans Selenium 4, il est possible que vos tests utilisent le protocole W3C même s’ils ne le sont pas testé sur Selenium 4. En effet, le protocole WebDriver W3 est disponible à partir de Selenium v3.8. Le hic, c’est que l’implémentation WebDriver est rétro compatible (c’est-à-dire que si les tests ne fonctionnent pas comme prévu sur le protocole W3C, ils sont testés par rapport au protocole JSON Wire).

Pour résumer, les fonctionnalités de Selenium 4 Alpha telles que la conformité W3C offriront de nombreux avantages à l’ensemble de la communauté Selenium. Jusque-là, nous attendons la sortie de la version stable de Selenium 4.

Formez-vous sur Selenium qui vous permettra de vous familiariser avec la rédaction de scripts Selenium pour l’automatisation du test des applications de navigateur. Notre partenaire UpSkill4IT vous propose cette formation sur Selenium – Automatisation des tests.

Vous avez besoin d’aide sur ce sujet ? Découvrez notre offre “Automatisation des tests” et échangez gratuitement avec nos experts !

Ask for advice to our experts !