Dramatiker oder Selen? / Sudo Null IT-Nachrichten

Das Schreiben von Tests in der modernen Entwicklung spielt eine der wichtigsten und wichtigsten Phasen in der Entwicklung moderner Software. Im Rahmen der Entwicklung eines der neusten Projekte standen wir vor einer ähnlichen Aufgabe. Eine der Testmethoden war die Entwicklung vollwertiger End2End-Tests.

Insbesondere bestand die Aufgabe darin, Tests mit Web-Treibern zu entwickeln, hauptsächlich unter Chrome. Sie können die Sprache und das Framework nach eigenem Ermessen auswählen, das Unternehmen entwickelt jedoch aktiv c# und Typoskript. Im Allgemeinen sollte der End2End-Test das Hauptszenario der Benutzerinteraktion abdecken, einschließlich der erforderlichen Authentifizierung. In der Realität bedeutete dies, dass die Verfügbarkeit und Funktionalität der wichtigsten Steuerelemente und Informationseingabe, Registerkartennavigation und Navigationsskripte von verschiedenen funktionalen Rollen im System überprüft werden mussten.

Zu den Features des getesteten Dienstes gehören die aktive Nutzung von Drag-and-Drop, das durch sortablejs implementiert wird, sowie Shadow-Dom-Manipulationen. Außerdem wurde das Frontend in eckig geschrieben und die Interaktion mit dem Server erfolgte über GRPC.

Nachdem wir mehrere beliebte Open-Source-Lösungen überprüft hatten, entschieden wir uns, uns auf Selenium und Playwright zu konzentrieren. Selenium erregte unsere Aufmerksamkeit vor allem wegen seiner Popularität und Zuverlässigkeit, außerdem wurde bereits eine Startplattform dafür geschaffen und Playwright wegen seiner Modernität und Entwicklungsgeschwindigkeit.

Da Selenium ein ziemlich alter, bekannter, zuverlässiger und bereits erprobter Ansatz zur Implementierung einer solchen Funktionalität ist, haben wir uns zunächst in dessen Richtung umgesehen.

  • Selen

  • Dramatiker

  • ziehen und ablegen

  • Schattenhaus

  • Ergebnisse

Vergleichsstatistiken mehrerer Frameworks, die wir berücksichtigt haben, werden hier präsentiert.

Selen

Selenium ist ziemlich alt und wahrscheinlich das zuverlässigste Framework, wenn es darum geht, beliebte Lösungen im Internet zu finden. Es unterstützt ziemlich viele Sprachen, die zu uns passen. Zu den Hauptvorteilen gehören:

  • Niedrige Eintrittsbarriere

  • Es ist möglich, Tests in c# zu schreiben

  • Unterstützung für eine ziemlich breite Palette von Browsern (Chrome, Firefox, Edge, IE, Opera, Safari)

  • Ausreichend detaillierte Dokumentation und viele Empfehlungen zur Lösung beliebter Probleme im Internet

  • Bewährt

  • Genug flink

  • Ein Parallelbetrieb ist möglich

Zu den Nachteilen der Verwendung von Selen gehören:

  • Der Entwickler muss das Treiber-Update selbst überwachen oder Cloud-Dienste nutzen

  • Es gibt Probleme bei der Implementierung von Drag & Drop (dies wird weiter unten besprochen)

  • Die Suche nach Elementen im Schattendom ist von der Suche nach einfachen Elementen getrennt, was jedoch kein klarer Nachteil ist

Im Allgemeinen ist Selenium eine gute Wahl, wenn Sie Unterstützung für reines Safari und IE und einen guten Weg zur Selbstentwicklung benötigen, da es eine große Anzahl von Unternehmen auf dem Arbeitsmarkt gibt, die diese Methode zur Implementierung von Tests verwenden. Selenium ist ziemlich einfach, Tests zu schreiben, es ist unwahrscheinlich, dass Sie große Probleme haben, Code zu verstehen oder zu schreiben, und wenn es welche gibt, werden Lösungen meistens schnell genug gefunden, falls es welche gibt. Je kniffliger und komplexer die zu testende Schnittstelle wird, desto mehr nicht standardisierter selbstgeschriebener Code wird in Ihren Tests erscheinen.

Dramatiker

Wenn Selen in die Kategorie der guten Langzeitlösungen gehört, dann gehört Playwright in die Kategorie der modernen Lösungen. Playwright begann seine Reise im Jahr 2020, daher ist die Dokumentation, wie Empfehlungen zur Lösung einiger Probleme, möglicherweise frisch, funktioniert aber nicht immer.

Es ist möglich, sowohl in c# als auch in ts zu implementieren.

Vorteile:

  • Tests werden in einer isolierten Umgebung von Grund auf neu durchgeführt

  • Eine große Anzahl raffinierter Benutzeraktionen

  • Drag&Drop funktioniert super

  • Die Suche nach Elementen im Schattendom unterscheidet sich nicht von der üblichen Suche nach Elementen

  • Genug flink

  • Keine Notwendigkeit, dem Fahrer zu folgen

  • Parallellauf out of the box

  • Docker-Integration

Mängel:

  • Die Lösung ist neu und modern und daher gibt es nicht zu viele Informationen im Internet sowie Unternehmen, die diesen Ansatz verwenden.

  • Keine Unterstützung für Safari und IE

  • Die Eintrittsschwelle ist etwas höher als bei Selen

Im Allgemeinen kann ich aus der Zusammenarbeit mit Playwright sagen, dass die Bibliothek immer wieder überrascht, meistens positiv, aber nicht immer. Einige Aufgaben können eine leichte Benommenheit verursachen, aber meistens werden Lösungen gefunden. Playwright ist eine großartige moderne Lösung zum Schreiben von UI-Tests.

ziehen und ablegen

Drag and Drop wird mittlerweile in vielen Arbeitsprojekten eingesetzt. Dieser Vorgang wird sowohl von Selenium als auch von Playwright unterstützt. Hier sollte jedoch klargestellt werden, dass Selenium Drag and Drop von mehreren Aktionen sammelt:

act.ClickAndHold (ziehbar) .MoveToElement (löschbar) .Release() .Build() .Perform();

Dieser Code sammelt mehrere Aktionen mit Elementen. Wir klicken zuerst auf das schwebende Element und halten es gedrückt, verschieben es dann zum Container und lassen es los.

Vollständiges Analogon dieses Codes:

act.DragAndDrop (ziehbar, ablegbar) .Build() .Perform();

Hier wird die DragAndDrop-Funktion verwendet, die im Gegensatz zu früher aus einer Gruppe von Ereignissen besteht.

Beide Codes funktionieren jedoch nicht, wenn das Drag-Attribut (draggable=’true’) dynamisch gesetzt wird, wenn auf das Element geklickt wird. Wundern Sie sich also nicht, wenn Sie Drag & Drop in Selenium nicht implementieren können.

Im Gegensatz zu Selenium implementiert Playwright Drag and Drop sogar mit dynamischen Eigenschaftsänderungen von Haus aus.

warte auf Page.DragAndDropAsync(“.draggable”, “.droppable”);

Hier funktioniert das Ziehen eines Elements mit der Klasse „draggable“ auf ein Element mit der Klasse „droppable“ auch in der Dynamik, also wenn das Element durch Anklicken ziehbar wird.

Wenn Ihr Projekt also aktiv Drag & Drop verwendet, ist es besser, sich für Playwright zu entscheiden.

Schattenhaus

Die Arbeit mit dem Schattenhaus ist in beiden Fällen unterschiedlich. Selen arbeitet separat mit dem Shadow-Home, d. h. über die shadowroot-Eigenschaft. Im Allgemeinen läuft die Suche innerhalb der Schattenwurzel in Selenium auf die Suche innerhalb des Inhalts der Schattenwurzel hinaus. Dies kann zum Beispiel durch das Schreiben einer regulären Erweiterungsmethode erfolgen, die nach Elementen in der Schattenwurzel sucht.

public static IEnumerable FindShadowRootElements(this IWebElement shadowHost, By by) { var shadowRoot = shadowHost.GetShadowRoot(); return shadowRoot.FindElements(by); }

Hier erhalten wir die shadowRoot-Eigenschaft des Elements und suchen nach seinem Inhalt. Es ist auch möglich, eine Erweiterungsmethode zu schreiben, die Lookups kombiniert.

So unterscheidet sich bei Selenium die Suche nach Elementen im Baumhaus deutlich von der Suche im Schattenhaus, was jedoch nicht eindeutig als Nachteil, aber auch als Vorteil bezeichnet werden kann. In einigen Fällen kann es erforderlich sein, die Suche in dem einen oder anderen Haus zu trennen.

In Playwright ist das Durchsuchen eines Schattenhauses nicht anders als das Durchsuchen eines normalen Hauses. Zum Beispiel,

warte auf Page.Locator(“#shadowIdElement”).WaitForAsync();

Hier warten wir darauf, dass das Element mit dem Bezeichner shadowIdElement geladen wird, auch wenn dieses Element im shadowDom Playwright gefunden wird. Die Suche nach Elementen über CSS oder Text in Playwright erfolgt zuerst im normalen Home und dann in shadowDow. Falls wir jedoch nicht im shadowDom suchen müssen, können wir den Ausdruck so schreiben:

warte auf Page.Locator(“:light(#elId)”).WaitForAsync();

Hier ist die Suche nach einem Element mit id = ‘elId’ auf nur ein normales oder helles Haus beschränkt.

Wenn Sie aktiv mit shadowDom innerhalb einer Client-Framework-Komponente oder eines Microfrontends arbeiten und Elemente im Licht- und Schattenhaus nicht trennen müssen, ist es besser, Playwright zu verwenden. Wenn eine Trennung erforderlich ist, können Sie sowohl Selenium als auch Playwright verwenden.

Ergebnisse

Trotz der Tatsache, dass diese Frameworks ähnliche Funktionen implementieren, können sie in einigen Fällen kombiniert werden, Selenium- und Playwright-Ansätze können innerhalb desselben Projekts kombiniert oder sogar getestet werden. Diese Kombination kann jedoch zu Unordnung im Code und komplizierter Logik sowie zum Wachstum des „Framework-Zoos“ führen.

Alles in allem, wenn Sie UI-Tests für Ihren Dienst implementieren müssen und keine klaren Anforderungen zur Unterstützung von Safari und IE haben und Ihr Unternehmen nicht über Tonnen von Selenium-Code verfügt, ist Playwright eine großartige, moderne, schnell wachsende Alternative, die einige bietet moderne schöne funktionelle Goodies sofort aus der Box. Darüber hinaus ist Playwright ein moderneres und sich schnell entwickelndes Framework, das mit der Entwicklung moderner Frontline-Frameworks Schritt hält.

Im Rahmen von Schreibtests haben wir uns für die Playwright.net-Version entschieden, die sich problemlos in bekannte Frameworks für Unit-Tests wie NUnit oder Ms Test einfügt. Da Frau Test bereits existierte, fiel die Wahl zu seinen Gunsten.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *