webentwicklung-frage-antwort-db.com.de

Warum verwenden wir WebDriver anstelle von Selenium IDE?

Warum können wir nicht alle unsere Testfälle in Selenium IDE aufnehmen, nach Java/WebDriver exportieren und in WebDriver mit Eclipse ausführen?

Ich brauche eine klare Erklärung, da ich bei der Verwendung von WebDriver sehr verwirrt bin!

Und kann jemand bitte erklären, warum IDE aufgezeichnete Skripts in WebDriver fehlschlagen?

35
Sagar

warum können wir nicht alle unsere Testfälle in IDE aufzeichnen, sie in Java/webdriver exportieren und in webdriver ausführen

Tolle Frage, und hier ist die Antwort:

Selenium IDE ist ein Aufnahme- und Wiedergabewerkzeug, das sehr einfach zu bedienen ist, aber sehr unzuverlässig ist. Aufnahme und Wiedergabe sind in Webanwendungen normalerweise verpönt. Da Webanwendungen häufig geändert werden, ist die IDE aufgrund des möglicherweise auftretenden Wartungs-Alptraums keine ideale Lösung für eine Produktionsumgebung.

Lassen Sie mich ein praktisches Beispiel geben. Sie zeichnen Ihren Test auf und finden ein Element mit einer dynamischen ID. Sicher, wir können es in Eclipse importieren, aber was passiert, wenn der Test auf der Straße versagt? Warum machen Sie Ihren Test nicht einfach agil und unabhängig, um sie überhaupt erst zu fangen.

Es kommt auch auf Ihre Prinzipien der Testautomatisierung an. Testautomatisierung in MEINER Meinung (und einige andere Fachleute) glauben, dass die Testautomatisierung aus Programmiersicht betrachtet werden sollte. Programmierer sollten die Tests schreiben und die Tests beibehalten. Idealerweise sollte Ihr Qualitätssicherungspersonal geschult werden, um eigene Tests zu schreiben und zu warten.

Zurück zu Ihrer Frage: Die IDE ist als schnelle Lösung für die Automatisierung konzipiert, NICHT als Lösung für eine vollständige Regressionssuite. 

Und kann jemand erklären, warum IDE aufgezeichnete Skripts in Webdriver fehlschlagen?

Ich habe die IDE seit einiger Zeit nicht mehr verwendet, aber der Grund dafür ist, dass die Skripts, die exportiert werden, einfach step sind, keine gesamte Java-Datei. Dies ist auch darauf zurückzuführen, dass Selenium IDE -Exporte agnostisch sein sollten, wenn es darum geht, wie der Test ausgeführt wird. Angenommen, ich bin ein Benutzer von jUnit. Was wäre, wenn Selenium IDE die ganze Zeit nach TestNG exportiert hätte? Das wäre nicht fair. Ehrlich gesagt würde ich lieber meine eigenen Tests erstellen, als diese Zeile jedes Mal zu ändern, wenn ich meine Testdatei erstelle.

Sie können den vollständigen Text einer durchgeführten Untersuchung lesen, die als Warum Test Wiedergabetests. Von Webanwendungen brechen? - /

54
sircapsalot

Warum können wir nicht einfach alle unsere Testfälle in Selenium IDE aufzeichnen, in Java/WebDriver exportieren und in WebDriver mit Eclipse ausführen?.

Sie können tun dies tatsächlich mit Selen IDE ziemlich leicht. Zeichnen Sie Ihren Testfall/Ihre Testsuite in Selenium IDE auf und exportieren Sie ihn als "Java/JUnit 4/Webdriver" in eine .Java-Datei. Dadurch wird ein JUnit-Test generiert, den Sie von Eclipse importieren und ausführen können (natürlich mit der richtigen Version von JUnit).

Es ist nicht 100% zuverlässig und Sie müssen möglicherweise einige manuelle Änderungen/Korrekturen vornehmen, aber im Allgemeinen funktioniert es ziemlich gut. Beginnen Sie mit einem einzelnen kleinen Testfall und arbeiten Sie von dort aus.

12
Marielle

Warum nicht einfach in IDE aufnehmen und die Aufnahme mit WebDriver abspielen ???

Die IDE weiß nicht, worauf zu warten ist

Angenommen, Bob führt manuelle Überprüfungen durch und zeichnet seine Interaktion mit Selenium IDE auf. Er führt einen Vorgang aus, der eine Weile dauert, um die GUI zu aktualisieren, und wenn der Vorgang abgeschlossen ist, klickt er auf eine Schaltfläche. Bob weiß, dass die Aktualisierung der GUI abgeschlossen ist, da ein Spinner, der beim Start des Vorgangs angezeigt wurde, nach Abschluss des Vorgangs entfernt wird. Wie erfasst die IDE die Tatsache, dass die Operation abgeschlossen sein muss, bevor auf die Schaltfläche geklickt wird? (Beachten Sie, dass dies nicht der Fall ist, wenn die Schaltfläche disabled ist, bis die Operation abgeschlossen ist.) Dies ist keine Hypothese: Wenn Sie dynamische Tabellen (wie die von DataTables verwalteten) testen, kann der Benutzer alles ändern Zeit.

Dies kann einer der Gründe sein, warum eine Folge von Befehlen, die mit IDE erstellt wurden, mit WebDriver fehlschlägt. Es weiß einfach nicht, worauf es warten soll.

Es ist möglich, Wartezeiten manuell in die IDE hinzuzufügen. Wenn Sie dies tun, nehmen Sie nicht mehr "nur alle unsere Testfälle auf". Und was Sie tun, ist mehr wie das Schreiben von Code für WebDriver.

Benutzer sind ineffizient

Vor nicht allzu langer Zeit gab es eine Selenium-Frage, in der der Benutzer Selenium dazu bringen wollte, auf den letzten Datensatz in einer Tabelle zu klicken, der mehrere Datenseiten enthielt. Die Frage war also: Wie kann ich die Tabelle bis zur letzten Seite durchblättern und dann auf den letzten Datensatz klicken? Jemand (vielleicht ich, vielleicht jemand anderes) wies darauf hin, dass die Tabelle in umgekehrter Reihenfolge sortiert werden kann und der Selenium-Code auf den ersten Datensatz klicken könnte, wenn die Tabelle sortierbar ist. Das sind 2 Operationen anstelle von p+1-Operationen: Klicken Sie auf p-mal, wobei p die Anzahl der Seiten ist, und 1 Mal für den Klick auf den Datensatz.

Wenn wir Code für WebDriver schreiben, haben wir die Möglichkeit, die Tests zu schreiben, um zu vermeiden, dass die landschaftliche Route verwendet wird, um die gewünschten Ergebnisse zu erzielen. Im nächsten Punkt finden Sie die technischen Details, warum dies wichtig ist.

Selen-Operationen können kostspielig sein

Wenn die Software, die Ihre Selenium-Befehle ausführt, lokal ist und Ihr Browser lokal ist, haben Sie möglicherweise nicht das Gefühl, dass Selenium-Operationen teuer sein können. Wenn Sie jedoch Ihre Befehle auf einem Computer ausführen und der Browser remote ist, werden Sie eine erhebliche Verlangsamung feststellen. Wenn Sie beispielsweise Ihren Browser in einem Sauce Labs VM oder in einem BrowserStack VM starten, um eine Testsuite auszuführen, wird die Verzögerung durch Netzwerkverzögerungen erheblich ansteigen Suite zu vervollständigen. Für eine vollständige Anwendungstestsuite kann dies viele Minuten mehr bedeuten.

Die IDE erzeugt eine Folge von Befehlen, die jeweils einen Roundtrip zwischen dem Selenium-Skript und dem Browser erfordern. Jede Rundreise summiert sich. Angenommen, ich möchte prüfen, ob zwei Elemente denselben Text enthalten. Ich werde Selenese nicht verwenden, weil ich normalerweise nicht die IDE verwende, aber bei Verwendung von WebDriver-Code in Python könnte das Skript Folgendes sein:

a = driver.find_element_by_id("a")
b = driver.find_element_by_id("b")
assert_equal(a.text, b.text)

Dieser Code erfordert 4 Roundtrips: einen Roundtrip pro find_element... und einen Zugriff pro Zugriff auf das Feld text. Der gleiche Test könnte geschrieben werden:

a_text, b_text = driver.execute_script("""
var a = document.getElementById("a");
var b = document.getElementById("b");
return [a.textcontent, b.textContent];
""");
assert_equal(a_text, b_text);

Dies erfordert nur eine Hin- und Rückfahrt. Wenn Sie mit der Funktion IDE Aktionen aufzeichnen, entspricht die Reihenfolge der Befehle dem vorherigen Snippet: viele Roundtrips. Wenn Sie Ihren Code für WebDriver schreiben, haben Sie die Möglichkeit, den Code zu optimieren.

Dies bedeutet nicht, dass das Selenium IDE nichts bringt, aber ich würde niemals daran denken, nur Tests mit ihm aufzunehmen und diese Aufnahmen dann mit WebDriver abzuspielen.

9
Louis

Wenn Sie ein Neuling sind, können Sie tatsächlich 80% Ihres IDE - Skripts als Ihr Webdriver-Java-Skript verwenden. Sie müssen lediglich Ihr exportiertes IDE -Skript und es etwas improvisieren wird gut funktionieren.

Wenn Sie jedoch mit dem Testen komplexer Funktionen beginnen, müssen Sie einige der grundlegenden Java-Methoden lernen, um das Problem zu lösen. 

3
user2959294

mit webdriver können Sie Ihre mit Selenium IDE erfassten Testfälle auf einem Selenium-Server oder über RC auf mehreren Servern ausführen. Dies beinhaltet Optionen zur Integration mit Selenium-fähigen Providern (siehe Link unten).

Wenn Sie beispielsweise Ihren Testfall in IDE erfasst haben, können Sie ihn leicht in Ihren eigenen Selenium-Server oder einen Anbieter wie Saucelabs integrieren, um die Ausführung Ihrer Testfälle in Firefox unter Ubuntu, Safari unter OSX und IE10 unter Windows 8 auszuführen Wie bei jedem Testfall können Sie es von Ihrem IDE (Eclipse/IDEA/etc), Ihrem Builder (maven/gradle /) und/oder über Ihr CI-System ausführen.

Check out https://saucelabs.com/Selenium für Beispiele. Wir haben unsere Selenium-Testfälle auch für Lasttests mit Soasta verwendet. Mit WebDriver können einfache IDE -Tests in vielen verschiedenen Kontexten verwendet werden.

1
Brett

Ich bin anderer Ansicht. Ich sehe keinen Grund, zusätzlichen Code beizubehalten, wenn eine einfache Aufzeichnung und Wiedergabe in einem Bruchteil der Zeit dieselben Ergebnisse erzielen kann. 

Ich bin damit einverstanden, dass das aufgenommene Skript agil sein muss. Es kann nicht nur so einfach sein wie die eingebauten Befehle, und man muss es agil machen und sogar eigene Makros (auch als Befehle/Aliase bezeichnet) implementieren, die für die zu testende App spezifisch sind.

Bei richtiger Implementierung und mit Hilfe von wenigen Selenium IDE Plugins wie der Flusskontrolle wird es jedoch zum Kinderspiel, solche komplexen Testanzüge zu warten und sie über den HTML Runner wiedergeben zu lassen. Ich habe Selenium IDE HTML-Skripts verwendet, um komplexe Websites vollständig abzudecken, und dasselbe Skript für alle Reaktionsmodi der App wiederverwendet. 

Die Wartung ist einfach, da mit IDE schnell ein ausgefallenes Cmd angepasst werden kann und AJAX Wartezeiten problemlos berücksichtigt werden können, indem auf die Änderung des DOM-Inhalts auf der Seite gewartet wird. Ich bin immer noch nicht davon überzeugt AJAX Entschuldigung für die Abweisung von Selenium IDE. 

Für eine Maven-Integration von Flusssteuerungsbefehlen befehlen/Aliase/Makros, die von Selenium IDE und dem SureFire-Test-Plugin von Maven verwendet werden, siehe: https://github.com/paulbors/sideflow

Fühlen Sie sich frei, es in Ihrem Produkt zu verwenden und bei Bedarf zu verbessern. 

1
Paul Bors

Denn wenn die Komplexität Ihres Codes zunimmt, ist es für Sie schwierig, ihn mithilfe von IDE zu verwalten. Die Pflege Ihrer Skripte wird mit IDE schwierig.

Auch das Exportieren von Testfällen von IDE in einen Web-Treiber ist nicht zu 100% zuverlässig.

1
Ankit

Andere Leute haben viele hilfreiche Antworten gegeben. Was fehlt, ist, wenn Sie Code schreiben, anstatt die IDE zu verwenden, können Sie Änderungen an der Datenbank vornehmen. Es hängt von der Website ab, die Sie testen, wie nützlich dies ist, aber hier sind einige nützliche Beispiele, die ich erlebt habe. In einem Fall hatte die Website mehrere Abschnitte einer Klasse. Bei einem unserer Tests wurden diese Abschnitte zu einem zusammengefügt. Die IDE konnte dies nicht tun. Mit webdriver können wir jedoch alle Testdaten in die Datenbank aufnehmen, die Zusammenführung durchführen und dann die Daten aus der Datenbank entfernen. 

Ein weiterer Vorteil des Web-Treibers ist Selenium Grid. Mit Grid können Sie Ihre Tests parallel und in mehreren Browsern ausführen. Dadurch werden Ihre Tests schneller und Sie können den Code gründlicher testen. 

0
Alex Cook