Parasoft C/C++test 2022.2 unterstützt das neue MISRA C:2012 Amendment 3 und eine Entwurfsversion von MISRA C++ 202x. Erfahren Sie mehr >>

Selen Hacks für Anfänger

Von Wilhelm Haaker

15. Oktober 2019

7  min lesen

Wenn Sie nach einem Selenium-Spickzettel suchen, um mit Selenium-Webtests loszulegen, finden Sie hier eine erfahrungsreiche Aufschlüsselung der ersten Schritte mit Selenium.

Während meiner Selen-Lernerfahrung habe ich einige Tipps und Tricks für den Einstieg entdeckt. Hier sind einige großartige Ressourcen, die auch Ihnen helfen könnten.

Ich habe kürzlich gelernt, wie man Selen verwendet, weil Parasofts neues Produkt für Selen-Tester Parasoft Selenic. Ich hatte bereits einige Erfahrungen mit Webtests, dem Schreiben von Java-Code und JUnit, aber ich hatte Selenium noch nie zuvor verwendet. Hier sind einige nützliche Ressourcen, die ich beim Hochfahren als hilfreich empfunden habe.

Was ist Selen?

Das erste, was Sie tun müssen, ist sicherzustellen, dass Sie den Unterschied zwischen verstehen Selen IDE und Selenium WebDriver. Ich hatte gedacht, dass Selenium IDE, ein auf Selenium WebDriver basierendes GUI-Aufnahme- / Wiedergabeprogramm, ein guter Einstieg sein würde, aber ich stieß schnell auf Einschränkungen, bei denen die Wiedergabe mit fehlerhaften / fehlenden Locators nicht erfolgreich war, und erkannte dies Jeder ernsthafte Selenium-Tester schreibt Code mit dem Selenium WebDriver. Der Würfel war gefallen, ich musste anfangen, Code zu schreiben.

Erste Schritte mit dem Selenium WebDriver

Die Selenium WebDriver-Bibliotheken sind für verschiedene Sprachen verfügbar, sodass Selenium einem breiten Publikum zugänglich ist. Da ich es am bequemsten habe, Code in Java zu schreiben, habe ich mich daran gehalten. (Auch wenn JUnit für Selenium-Tests in Java nicht erforderlich ist, verstehe ich nicht, warum es niemand verwenden würde, da es eine Reihe von Funktionen enthält, die speziell für das Schreiben von Testfällen in Java entwickelt wurden.)

Wenn ich JUnits schreiben wollte, dachte ich mir, ich könnte sie genauso gut in einer IDE schreiben. Es gibt zwei IDEs, die in der Branche hauptsächlich für Java verwendet werden: Eclipse und IntelliJ. Die meiste Zeit meiner Karriere habe ich mit Eclipse verbracht, also bin ich dabei geblieben.

Nachdem ich diese Entscheidungen getroffen hatte, war ich bereit, loszulegen.

Zu wissende Fähigkeiten für Selen

Bevor Sie loslegen, stellen Sie sicher, dass Sie über einige Voraussetzungen verfügen, um mit den Grundlagen der Testautomatisierung vertraut zu werden.

Web-Fähigkeiten

Vertrautheit mit HTML und CSS: Sie sollten keine Angst vor der Seitenquelle einer Website haben und verstehen, wie die Seitenquelle in das übersetzt wird, was Sie im Browser sehen. Wenn HTML für Sie völlig fremd ist, schlage ich eine Grundausbildung vor. Hier ist eine großartige Website, die mir bei meiner frühen Ausbildung im Internet geholfen hat:

Entwicklertools und XPath des Browsers: Eine weitere grundlegende Fähigkeit besteht darin, zu verstehen, wie Elemente auf einer Seite gefunden werden. Selenium WebDriver unterstützt hierfür verschiedene Mechanismen, denen Sie bald ausgesetzt sein werden. Sie sollten mit den Entwicklertools des Browsers vertraut sein, um Elemente auf einer Seite zu finden. Hier finden Sie ein großartiges Tutorial, mit dem Sie sich mit Chrome vertraut machen können:

Codierungsfähigkeiten

Wenn Sie in eine Rolle als Testautomatisierungstechniker wechseln möchten, müssen Sie einige Codierungsfähigkeiten entwickeln. Bevor Sie ausflippen, ist die gute Nachricht, dass das Schreiben von Code zur Automatisierung von Webtests in Selen relativ einfach ist. Tatsächlich denke ich, dass Selen eine großartige Möglichkeit ist, das Codieren zu lernen. Der Code, den Sie schreiben, ist eng begrenzt, sodass Sie weniger wahrscheinlich völlig überfordert sind. Es sollte nicht schwierig sein, kostenlose Tutorials und Lektionen zu finden, um mit der von Ihnen gewählten Sprache zu beginnen. Um zu lernen, was Sie für Selen wissen müssen, habe ich ein fantastisches Tutorial gefunden, das Java und Selen für einen Anfänger abdeckt:

Wenn Sie sich für Java entscheiden, empfehle ich, auch JUnit zu lernen, ein beliebtes Testframework für Java. Hier ist ein großartiges Tutorial, das JUnit behandelt, UND die letzte Lektion behandelt das Anwenden von JUnit mit Selenium-Tests:

Einrichten Ihrer Umgebung

Neben dem Tutorial von toolsqa war eine weitere Ressource, die ich häufig besuchte, folgende:

Diese beiden Ressourcen decken alle Themen ab, die Sie zum Einrichten Ihrer Umgebung mit Eclipse, Java, JUnit 4, Selenium WebDriver und Maven benötigen.

… Maven? Was ist das? Ein Kommentar, den ich machen werde, ist, dass die meisten Tutorials, die ich gefunden habe, Maven als fortgeschrittenes Thema weiter unten in der Liste aufgeführt haben. Maven ist ein Build-Tool, mit dem das Kompilieren, Testen und Bereitstellen von Code mit allen erforderlichen Abhängigkeiten einfacher verwaltet werden kann. Wie JUnit ist Maven ein weiteres optionales Element, aber ich möchte es jetzt ansprechen, da es die Einrichtung Ihres Projekts erleichtert, sobald Sie wissen, was zu tun ist. Wenn Sie mit Maven beginnen, müssen Sie später nicht mehr über die Konvertierung Ihres Java-Projekts in ein Maven-Projekt nachdenken. Beginnen Sie einfach von vorne mit Maven! Das Tutorial, das mir am besten gefallen hat, war von:

Dein erstes Selenium-Skript

Beide Tutorial-Referenzen, die ich erwähnt habe, führen Sie gut durch die Erstellung Ihres ersten Skripts. Der toolsqa-Artikel geht von weniger Programmierkenntnissen aus und der Link softwaretestinghelp.com deckt mehr ab, aber beide sind ausgezeichnet:

Sobald Sie Ihr erstes Skript zum Laufen gebracht haben und mit JUnit vertraut sind, können Sie anhand der letzten Lektion aus dem JUnit-Tutorial von toolsqa Ihre ersten Skripte in das JUnit-Format umgestalten:

Das Seitenobjektmodell in Selen

Nachdem Sie sich mit den Selenium-Grundlagen vertraut gemacht haben und ein Skript haben, das ein oder zwei Szenarien in Ihrem Browser wiedergibt, sollten Sie bereit sein, mit dem nächsten Level fortzufahren. Das Seitenobjektmodell ist eine Möglichkeit, Ihren Selenium-Testcode zu organisieren, um ihn wartbarer zu machen und doppelten Code zu verringern. Bei meinen Tests bis zu diesem Zeitpunkt war der gesamte Testcode in meiner Testmethode enthalten. Also habe ich einen zweistufigen Prozess durchlaufen, indem ich zuerst meinen vorhandenen Test auf das Seitenobjektmodell umgestaltet und dann das zweite Umgestalten erneut durchgeführt habe, um ihn mit dem Page Factory-Muster zu optimieren. Dies war ein lehrreicher zweistufiger Prozess, und ich kann mir nur vorstellen, wie sehr ich es bereuen würde, wenn ich diese Best Practices übersprungen und Test für Test wild erstellt hätte. Sie können dies automatisch tun, wenn Sie den Smart Recorder in verwenden Parasoft Selenic. Hier sind einige Anleitungen, mit denen ich mich über das Thema informiert habe:

Wenn dies nach zusätzlicher Arbeit und zusätzlichem Code für dasselbe Ergebnis aussieht, haben Sie Recht. Und wenn Sie immer nur 1 oder 2 Tests durchführen, ist dies möglicherweise übertrieben, aber für einen Testautomatisierungsingenieur ist dies nie der Fall. Dieses Muster macht weltweit Sinn, wenn Sie eine robuste Regressionstestsuite mit 100 oder 1000 Tests erstellen. Durch die Wiederverwendung von Code sparen Sie auf lange Sicht unglaublich viel Zeit.

Elementposition

Wenn Sie anfangen, mit Ihren Selenium-Skripten zu experimentieren, werden Sie verstehen, warum ich das Auffinden von Elementen auf einer Seite als notwendige Fähigkeit aufgeführt habe. Sie befinden sich in der Erweiterung der Entwicklertools des Browsers VIELund Sie werden anfangen, mit XPath zu experimentieren. Während es mit Selen viele Möglichkeiten gibt, Elemente auf einer Seite zu finden, ist XPath eine der flexibelsten und leistungsstärksten. Wenn Sie ein Element mit einfachen Strategien wie der Verwendung einer ID, eines Namens oder eines Links nicht eindeutig identifizieren können, suchen Sie nach XPath- oder CSS-Locators. Jeder einigermaßen komplexe Selenium-Test benötigt hier oder da ein wenig XPath, um hartnäckige Seitenelemente zu finden. Je besser Sie mit XPath werden, desto effektiver werden Sie als Tester.

Okay Wilhelm, XPath ist großartig, kannst du mir hier mehr als nur Hausaufgaben machen? Eigentlich ja! Es gibt auch eine raffinierte Chrome-Erweiterung (die auch für Firefox verfügbar ist) namens TruePath. Dieses Plugin erstellt ordentlich Listen empfohlener XPaths, aus denen Sie auswählen können, die Sie kopieren / in Ihren Selenium-Locator-Code einfügen können. Es ist nicht immer perfekt, aber ich fand es hilfreich, entweder einen relativen XPath zu präsentieren, den ich sofort mochte, oder einen relativen XPath, der nah genug an etwas war, das mir gefiel, und das ich dann als Ausgangspunkt für Optimierungen verwenden konnte.

Intelligentes Warten auf AJAX, das jQuery verwendet

Sobald das Auffinden von Elementen zur zweiten Natur geworden ist, werden Sie höchstwahrscheinlich auf ein anderes häufiges Problem stoßen. Die Webanwendung, die Sie testen, hat AJAX (Asynchron JAvaScript And XML) ruft auf, dass der Browser eine Verbindung zum Server herstellt und Ihr Selenium-Skript die Aktionen durchläuft, die dem Browser nicht genügend Zeit geben, um die Verarbeitung dieses asynchronen Datenverkehrs abzuschließen. Die E-Commerce-Website, die ich getestet habe, hatte dieses Problem, bei dem mein Selenium-Test so schnell auf "In den Warenkorb" und dann auf "Warenkorb anzeigen" klickte, dass der Warenkorb leer war, als er auf die Warenkorbseite kam! Ich musste meinem Selenium-Test mitteilen, dass er eine angemessene Zeit warten soll, bevor ich auf "Warenkorb anzeigen" klicke. Aber wie geht das?

Es gibt einige grundlegende Selenium-Lektionen im Zusammenhang mit Wartebedingungen, die in den Tutorials behandelt werden, aber keine davon schien für so etwas Asynchrones und Dynamisches geeignet zu sein. Wie kann ich vorhersagen, wie lange der Webserver brauchen wird, um zu antworten? Überschätze ich die Sicherheit und mache meinen Test langsamer als nötig? Gibt es einen besseren Weg? Es stellt sich heraus, dass es gibt. Viele moderne Webframeworks verwenden heute die jQuery-Bibliothek zur Unterstützung der AJAX-Aufrufe, die sie an den Back-End-Server senden. Mit Selenium WebDriver kann ich JavaScript als Testschritt ausführen, und ich kann JavaScript ausführen, das den Status von jQuery überprüft, um einen Hinweis darauf zu erhalten, wann der Browser mit dem Webserver kommuniziert und es in Ordnung ist, fortzufahren. Tief in der toolsqa-Website vergraben, interessanterweise NICHT Teil des Selenium-Tutorials, fand ich Folgendes:

Für Anfänger sind diese zusätzlichen Informationen großartig, aber wenn Sie etwas wollen, das mehr auf den Punkt bringt, finden Sie hier einen kurzen Artikel zum gleichen Thema:

Bewältigung des Wandels

Das letzte Thema, das ich mit Ihnen verlassen werde, ist eines, das jeden Selenium-Tester plagt, der Veränderungen verwaltet. Einer der Nachteile der Automatisierung von Webtests ist die Häufigkeit, mit der sich die Benutzeroberfläche ändert, und wie sich dies auf die Stabilität Ihrer automatisierten Tests auswirken kann. Als Testautomatisierungsingenieur werden Sie sich schnell an den Prozess der Fehlerbehebung gewöhnen, warum ein Test nicht vollständig ausgeführt werden konnte und ob dies der Fall war:

  • Ein Problem mit Ihrem Test
  • Ein Problem mit der Umwelt
  • Eine harmlose Änderung an der Anwendung (dh kein Fehler)
  • Eine unerwartete Änderung an der Anwendung (dh ein echter Fehler!)

Erwarten Sie viele Fehlalarme, wenn Ihre automatisierten Tests fehlschlagen, nicht weil sie einen Fehler gefunden haben, sondern weil sie gewartet werden müssen oder weil die Umgebung ein Problem hatte.

Eine der Strategien zur Minimierung dieses allgegenwärtigen Problems, die ich bereits mit Element Location angesprochen habe. Wenn ein Test ein Element nicht finden kann, liegt dies häufig daran, dass eine Standortstrategie verwendet wird, die bei der neuesten Bereitstellung der Anwendung nicht mehr gültig ist. Wie Sie ein Element lokalisieren, kann hier von Bedeutung sein. Lassen Sie uns daher ein Beispiel für das Schreiben eines Locators diskutieren, der Änderungen widersteht:

Wenn Sie über einen absoluten XPath für ein Element wie dieses nachdenken:

/ html / body / div [25] / div [2] / div / span / section [2] / div / h2 / p

Junge, jede kleine Änderung am HTML wird das Ding kaputt machen. Wenn Sie einen relativen XPath wie folgt erstellen:

//p[@id='8232:0′‹conties(.,'Guidance for Success ')]

Dann hat Ihr Test eine bessere Erfolgschance. Beachten Sie die Worte "bessere Chance". Manchmal ändert sich die Anwendung so sehr, dass Sie einfach kein Glück haben. Das Schreiben widerstandsfähigerer Tests verringert jedoch die Wahrscheinlichkeit, dass Sie in Zukunft selbst arbeiten. (Oder Sie können auschecken Parasoft Selenic.)

Das gleiche Problem tritt auch beim Warten auf. Viele Faktoren können aufgrund von Wartebedingungen zu Instabilität in Ihrer Testautomatisierung führen. Mithilfe von Strategien wie Smart Waiting unter AJAX können Sie mithilfe von jQuery die Wahrscheinlichkeit verringern, dass aufgrund von Wartebedingungen ein Problem mit Ihrem Test behoben werden muss. Während Sie sich mit diesem Thema befassen, finden Sie hier ein hilfreiches Tutorial zu Wartezeiten in Selen:

Genau wie bei der Elementpositionierung werden Sie jedoch manchmal SOL und eine Wartung ist unvermeidlich.

Zusammenfassung

Die Erfahrung mit dem Erlernen von Selen hat mir eine Wertschätzung für die Herausforderungen gegeben, die Sie auf Ihrem Weg zum Testautomatisierungsingenieur erwarten können. Wenn Sie neu sind und sich eingeschüchtert fühlen, denken Sie daran, dass dies einfacher ist als Sie denken und Sie in kürzester Zeit ein erfahrener automatisierter Webtester sind.

Möchten Sie sehen, wie Ihr Team mit Automatisierung und KI zuverlässige Selenium-Web-UI-Tests erstellen kann?

Von Wilhelm Haaker

Wilhelm Haaker ist Senior Solutions Architect bei der Parasoft Corporation und verfügt über Fachkenntnisse in der gesamten Parasoft-Produktsuite. Wilhelm ist spezialisiert auf Testautomatisierungsstrategien für offene Systeme, Webanwendungen und Microservices sowie SOA für Entwickler durch Funktions- und Leistungstestingenieure.

Erhalten Sie die neuesten Nachrichten und Ressourcen zum Testen von Software sofort.