Selenium WebDriver au service du développeur

Décodage du rapport de Dmitry Kostichev avec Backend-stories // Version vidéo à l'intérieur

Si vous avez soudainement besoin de vous intégrer à une ressource Internet tierce et n'avez pas le temps de le comprendre, Selenium viendra à la rescousse. Dmitry Kostichev a expliqué sur l'exemple de son projet comment automatiser le travail dans le navigateur sans quitter votre service.


Bonjour tous le monde. Je m'appelle Dmitry et aujourd'hui je partagerai mon expérience de l'utilisation de Selenium dans le développement backend. À quoi ça sert? Le sélénium est nécessaire pour automatiser l'interaction avec certaines ressources Internet, pour niveler les facteurs humains en remplissant certaines données, etc. Pour le développement, cela peut être nécessaire dans de tels cas lorsque, par exemple, il n'y a pas d'API sur la ressource Internet, etc. Et sur l'exemple de mon projet, la tâche consistait à renseigner les données client (avant cela le service devait préparer correctement toutes les informations) et les enregistrer sur ce site, en l'occurrence MasterCard.



Après un examen plus approfondi de ce site, il a été révélé qu'il n'y a pas d'api auquel nous pouvons tendre la main et tout faire. Tout le traitement est effectué dans des scripts JS, dans lesquels rien n'est clair et les données sont toutes encodées. La décision a été prise - pour essayer Selenium à ces fins, c'est-à-dire que nous allons attacher à Selenium l'ensemble de notre service, qui procédera à cet enregistrement à un moment précis.

En fin de compte, qu'est-ce que le sélénium et comment travailler avec lui? Le projet Selenium se compose d'une bibliothèque qui communique avec l'interface du pilote Web pour un navigateur spécifique. Une liste des bibliothèques et des navigateurs disponibles est affichée sur la diapositive. Et maintenant, je vais montrer comment cela fonctionne à peu près sur mon projet.

Regardez un screencast ou une vidéo détaillée à la fin du post.

Le service va maintenant générer un fichier, le télécharger immédiatement sur ce site et vérifier si tout a bien été enregistré. Ici, en fait, il colle, charge et ainsi de suite. Et maintenant, il va probablement sauter sur le fait que tout va réussir. L'automatisation est suffisamment rapide et ne nécessite aucune ressource importante. Apparemment, tout était parfaitement enregistré.

Comment cuisiner tout ça? La bibliothèque Selenium possède des commandes de base telles que:

  • Création d'un pilote Web d'instance pour un navigateur spécifique;
  • Liens clics;
  • Travailler avec des éléments: clics, etc.

Le pilote Web vous permet de recevoir des sessions et des cookies comme dans un navigateur normal. Vous pouvez également les modifier et les personnaliser vous-même. Vous pouvez également exécuter des scripts js sur la page. Il existe une bibliothèque qui étend cette fonctionnalité de Selenium lui-même, appelée Selenide. Sa principale caractéristique est de masquer la création de pilotes d'instance. Par exemple, nous voyons que nous appelons simplement la commande open, donnons une sorte de lien et que le navigateur démarre déjà, il n'est pas nécessaire de configurer quoi que ce soit. Et la bibliothèque élargit le travail avec des éléments, quelques préréglages supplémentaires. Tout cela semble pratique, vous pouvez rapidement le comprendre et tout utiliser.

Lorsque vous travaillez avec des ressources en ligne, et finalement avec Selenium, il existe certains modèles de conception. Et l'un d'eux est les objets de page. Son essence réside dans le fait que nous décrivons tous ces éléments dans une certaine classe. Et puis nous pouvons le réutiliser et cela semble plus facile. Voici quelque chose comme ceci: nous appelons la commande open, donnons la classe des objets de page et ensuite nous pouvons utiliser toutes ses méthodes, par exemple, en travaillant avec des éléments.



Nous recherchons des éléments par le modèle DOM de la page HTML par des sélecteurs tels que xpath, css et autres. Leurs principales différences, par exemple entre xpath et css, sont que le xpath peut aller «en profondeur», ainsi que de haut en bas. Et css, au contraire, est seulement en panne. Autrement dit, ce sont les sélecteurs les plus utilisés.



En fin de compte, nous avons besoin directement d'un navigateur, que Selenoid peut nous aider directement. En substance, c'est un cadre qui contrôle la création et la modification de ces conteneurs avec des navigateurs. Mais il est davantage conçu pour les systèmes chargés où ces navigateurs sont créés en grand nombre. Et dans notre situation, ce n'est pas vraiment nécessaire, mais utilisez uniquement le conteneur lui-même. Et maintenant, je vais montrer comment cela devrait déjà fonctionner sur le serveur.

En fait, l'interaction de la page ressemble à ceci, c'est un traitement de données assez linéaire. Dans ce cas, je me suis divisé en étapes - transitions vers les pages. C'est là que les données sont remplies et, directement, téléchargées par fichiers. En principe, tout est assez simple. Voici à quoi ressemble une classe pageobject, rappelant tout à fait un DTO. Nous décrivons simplement les éléments, par exemple, ici dans le cas actuel de PCSS Selectum. Telle est la syntaxe de Selenide.



Pour que cela fonctionne, nous avons besoin d'une description du pilote distant pour se connecter au conteneur Docker. Les principaux paramètres dont vous avez besoin pour y arriver sont le navigateur que nous utiliserons et, en fait, la résolution et d'autres lignes importantes pour le navigateur. Mais pour travailler avec le conteneur Docker, vous aurez également besoin de paramètres tels que le mode sans tête. Autrement dit, dans sa forme actuelle, il tournera sur le serveur. Ce mode désactive les graphiques dans le navigateur, il fonctionnera donc plus rapidement et consommera moins de ressources.

De plus, il n'y aura pas de Sandbox, qui est désactivé par la sécurité Chromium dans ce cas, et il sera possible d'exécuter votre propre code, JS ou autre. Le troisième paramètre est nécessaire pour que Chromium fonctionne normalement sur les machines Unix, enregistre correctement les fichiers de tempo. Et le quatrième, en fait, est nécessaire pour que nous puissions télécharger des fichiers. Et surtout, le pilote distant a un indicateur qui vous permet de télécharger un fichier à partir du stockage local où l'application s'exécute, déjà via le pilote Supprimer.



Je vais maintenant montrer comment cela fonctionne avec le conteneur Docker. Téléchargez le conteneur Docker et l'application elle-même. Il sera également lancé à peu près de la même manière, c'est-à-dire qu'il n'y aura en principe rien de nouveau. Seulement ici, nous verrons l'interaction dans une sorte de journaux. En principe, ils peuvent également être surveillés, travailler avec eux, etc. Par conséquent, vous pouvez comprendre l'interaction qui se produit. Il s'agit de la sortie du conteneur Docker avec Chromium directement où se trouve le navigateur.



En principe, tout fonctionne parfaitement avec le conteneur docker. De plus, tout est vérifié et l'inscription est terminée avec succès. De plus, quels problèmes généraux pourraient être rencontrés dans une telle approche? Je n'avais pas autant de problème que l'ignorance. Les transferts de fichiers dans le conteneur Docker, comme d'habitude, font tout - la rotation du volume. Mais dans ce cas, si vous souhaitez toujours exécuter localement, vous devez avoir deux configurations pour le projet, mais, comme il s'est avéré, le pilote distant peut être configuré via l'indicateur. Il peut transférer ce fichier directement par lui-même, et aucun geste supplémentaire n'est nécessaire.

Vous devrez également suivre la page avec laquelle nous travaillons - une ressource en ligne. Parce que, dans mon cas, il s'agit d'un autre système, auquel personne n'a de relation avec mon équipe, et cela doit également être surveillé, surveillé par des journaux, etc. Comme avec le navigateur, il est constamment mis à jour, vous devez le surveiller, le support peut baisser. Eh bien, en principe, vous pouvez en quelque sorte configurer les journaux et il n'y aura aucun problème.

En fin de compte, à quel point est-ce devenu plus facile? Il m'a semblé que je pouvais résoudre le problème d'interagir avec ce site beaucoup plus rapidement que si je connaissais le code js. Autrement dit, pour comprendre le sélénium et l'interaction peut être plus rapide qu'avec le fait que les données sont encodées et on ne sait pas comment les recoder. L'essentiel est la vitesse de développement.

Reportage vidéo - à partir de 16h30


All Articles