Selenium WebDriver im Dienste des Entwicklers

Entschlüsselung von Dmitry Kostichevs Bericht mit Backend-Geschichten // Videoversion im Inneren

Wenn Sie plötzlich eine Internetressource eines Drittanbieters integrieren müssen und keine Zeit haben, dies herauszufinden, wird Selenium zur Rettung kommen. Dmitry Kostichev erklärte am Beispiel seines Projekts, wie man die Arbeit im Browser automatisiert, ohne den Dienst zu verlassen.


Hallo an alle. Mein Name ist Dmitry und heute werde ich meine Erfahrungen mit Selenium in der Backend-Entwicklung teilen. Wofür ist das? Selen wird benötigt, um die Interaktion mit einigen Internetressourcen zu automatisieren, um menschliche Faktoren auszugleichen, die einige Daten ausfüllen usw. Für die Entwicklung kann dies in solchen Fällen erforderlich sein, wenn beispielsweise keine API in der Internetressource vorhanden ist und so weiter. Am Beispiel meines Projekts bestand die Aufgabe darin, die Kundendaten einzugeben (zuvor musste der Dienst alle Informationen korrekt aufbereiten) und auf dieser Site zu registrieren, in diesem Fall MasterCard.



Bei weiterer Betrachtung dieser Site wurde festgestellt, dass es keine API gibt, mit der wir alles erreichen und tun können. Die gesamte Verarbeitung erfolgt in JS-Skripten, in denen nichts klar ist und die Daten alle codiert sind. Die Entscheidung wurde getroffen - Selen für diese Zwecke zu testen, das heißt, wir werden unseren gesamten Service an Selen befestigen, der diese Registrierung zu einem bestimmten Zeitpunkt durchführen wird.

Was ist Selen und wie soll man damit arbeiten? Das Selenium-Projekt besteht aus einer Bibliothek, die mit der Webtreiberoberfläche für einen bestimmten Browser kommuniziert. Eine Liste der verfügbaren Bibliotheken und Browser wird auf der Folie angezeigt. Und jetzt werde ich zeigen, wie es ungefähr bei meinem Projekt funktioniert.

Sehen Sie sich am Ende des Beitrags einen Screencast oder ein detailliertes Video an.

Jetzt generiert der Dienst eine Datei, lädt sie sofort auf diese Site hoch und prüft, ob alles erfolgreich registriert wurde. Hier klebt, lädt und so weiter. Und jetzt wird er wahrscheinlich darauf springen, dass alles erfolgreich sein wird. Die Automatisierung ist schnell genug und erfordert keine großen Ressourcen. Alles war anscheinend perfekt registriert.

Wie kocht man das alles? Die Selenium-Bibliothek verfügt über grundlegende Befehle wie:

  • Erstellen eines Instanz-Webtreibers für einen bestimmten Browser;
  • Links Klicks;
  • Arbeiten Sie mit Elementen: Klicks usw.

Mit dem Webtreiber können Sie Sitzungen und Cookies wie in einem normalen Browser empfangen. Sie können sie auch ändern und für sich selbst anpassen. Sie können auch js-Skripte auf der Seite ausführen. Es gibt eine Bibliothek namens Selenide, die diese Funktionalität von Selen selbst erweitert. Die Hauptfunktion besteht darin, die Erstellung von Instanztreibern auszublenden. Als Beispiel sehen wir, dass wir einfach den Befehl open aufrufen, eine Art Link angeben und der Browser bereits startet. Es ist nicht erforderlich, etwas zu konfigurieren. Und die Bibliothek erweitert die Arbeit um Elemente, einige zusätzliche Voreinstellungen. Es sieht alles bequem aus, Sie können es schnell herausfinden und alles verwenden.

Bei der Arbeit mit Online-Ressourcen und letztendlich mit Selen gibt es einige Entwurfsmuster. Und eines davon sind Seitenobjekte. Sein Wesen liegt in der Tatsache, dass wir alle diese Elemente in einer bestimmten Klasse beschreiben. Und dann können wir es wiederverwenden und es sieht einfacher aus. Hier ist ungefähr so: Wir rufen den Befehl open auf, geben der Seite object-Klasse und können dann alle ihre Methoden verwenden, zum Beispiel mit Elementen arbeiten.



Wir suchen nach Elementen durch das DOM-Modell der HTML-Seite durch Selektoren wie xpath, css und andere. Ihre Hauptunterschiede, zum Beispiel zwischen xpath und css, bestehen darin, dass der xpath sowohl "tief" als auch nach oben und unten gehen kann. Und CSS ist im Gegenteil nur unten. Das heißt, dies sind die am häufigsten verwendeten Selektoren.



Letztendlich brauchen wir einen Browser direkt, dem Selenoid direkt helfen kann. Im Wesentlichen handelt es sich um ein Framework, das die Erstellung und Änderung dieser Container mit Browsern steuert. Es ist jedoch eher für geladene Systeme gedacht, auf denen diese Browser in großer Anzahl erstellt werden. Und in unserer Situation wird dies nicht dringend benötigt, sondern nur der Container selbst verwendet. Und jetzt werde ich zeigen, wie das schon auf dem Server funktionieren soll.

Eigentlich sieht die Interaktion der Seite ungefähr so ​​aus, es ist eine ziemlich lineare Datenverarbeitung. In diesem Fall habe ich in Schritte unterteilt - Übergänge zu Seiten. Hier werden Daten aufgefüllt und direkt von Dateien heruntergeladen. Im Prinzip ist alles ganz einfach. So sieht eine Seitenobjektklasse aus, die an ein DTO erinnert. Wir beschreiben einfach die Elemente, zum Beispiel hier im aktuellen Fall von PCSS Selectum. Dies ist die Syntax von Selenide.



Damit dies funktioniert, benötigen wir eine Beschreibung des Remote-Treibers, um eine Verbindung zum Docker-Container herzustellen. Die wichtigsten Einstellungen, die Sie benötigen, um dorthin zu gelangen, sind der von uns verwendete Browser und in der Tat die Auflösung und andere wichtige Zeilen für den Browser. Um mit dem Docker-Container arbeiten zu können, benötigen Sie jedoch auch Einstellungen wie den Headless-Modus. Das heißt, in seiner aktuellen Form wird es auf dem Server gedreht. In diesem Modus werden die Grafiken im Browser deaktiviert, sodass sie schneller arbeiten und weniger Ressourcen beanspruchen.

Außerdem ist es keine Sandbox, die in diesem Fall durch die Chromium-Sicherheit deaktiviert ist, und es ist möglich, Ihren eigenen Code, JS oder anderen auszuführen. Der dritte Parameter wird benötigt, damit Chromium auf Unix-Computern normal funktioniert und Tempo-Dateien korrekt aufzeichnet. Und der vierte wird tatsächlich benötigt, damit wir Dateien hochladen können. Und am wichtigsten ist, dass der Remote-Treiber über ein Flag verfügt, mit dem Sie eine Datei aus dem lokalen Speicher herunterladen können, in dem die Anwendung ausgeführt wird, und zwar bereits über den Treiber zum Entfernen.



Jetzt werde ich zeigen, wie es mit dem Docker-Container funktioniert. Laden Sie den Docker-Container und die Anwendung selbst herunter. Es wird auch ungefähr auf die gleiche Weise gestartet, das heißt, es wird im Prinzip nichts Neues geben. Nur hier werden wir die Interaktion in einer Art Protokoll sehen. Im Prinzip können sie auch überwacht werden, mit ihnen arbeiten und so weiter. Daher können Sie die Interaktion verstehen, die stattfindet. Dies ist die Ausgabe des Docker-Containers mit Chromium direkt dort, wo sich der Browser befindet.



Im Prinzip funktioniert alles perfekt mit dem Docker-Container. Außerdem wird alles überprüft und die Registrierung erfolgreich abgeschlossen. Welche allgemeinen Probleme könnten bei einem solchen Ansatz auftreten? Ich hatte weniger ein Problem als Unwissenheit. Dateiübertragungen im Docker-Container erledigen wie gewohnt alles - die Lautstärke. Wenn Sie in diesem Fall weiterhin lokal ausgeführt werden möchten, müssen Sie zwei Konfigurationen für das Projekt haben. Wie sich jedoch herausstellte, kann der Remote-Treiber über das Flag konfiguriert werden. Er kann diese Datei direkt über sich selbst übertragen, und es sind keine zusätzlichen Gesten erforderlich.

Sie müssen auch der Seite folgen, mit der wir arbeiten - einer Online-Ressource. In meinem Fall ist dies ein anderes System, zu dem niemand eine Beziehung zu meinem Team hat, und dies muss auch überwacht, durch Protokolle usw. überwacht werden. Wie beim Browser wird er ständig aktualisiert. Sie müssen ihn überwachen. Die Unterstützung wird möglicherweise eingestellt. Nun, im Prinzip können Sie die Protokolle irgendwie konfigurieren und es wird keine Probleme geben.

Wie viel einfacher ist es am Ende geworden? Es schien mir, dass ich das Problem der Interaktion mit dieser Site viel schneller lösen konnte, als wenn ich den js-Code kenne. Das heißt, Selen zu verstehen und die Interaktion kann schneller sein als mit der Tatsache, dass die Daten codiert sind und nicht bekannt ist, wie sie zurückcodiert werden sollen. Die Hauptsache ist die Geschwindigkeit in der Entwicklung.

Video melden - ab 16.30 Uhr


All Articles