Solange ich das PageObject-Muster verwende, habe ich mich gefragt, wo ich auf Elemente auf dynamischen Seiten warten soll. Angenommen, wir haben eine Testmethode und eine pageObject-Klasse. Sollte ich etwas wie (in Testmethode) machen:
Oder gibt es noch andere gute Methoden, auf das Element zu warten? Vielleicht sollten wir auf Element in der Methode isElementDisplayed in PageObject.class warten?
Sie sollten auf Elemente in Ihrer Seitenobjektklasse und nicht in der Testklasse warten, da Ihre Elemente in der Seitenobjektklasse definiert sein sollten, die Testklasse sollte nichts von Elementen, Selektoren oder ähnlichem wissen. Tests, IMHO, sollten nur Ketten von Methodenaufrufen enthalten, die den Testfluss beschreiben. Die gesamte Interaktion mit der Website und dem zugrunde liegenden DOM sollte in der Page Object-Klasse stattfinden.
Eine zu ausführliche Methode, um auf das Erscheinen eines Elements zu warten, könnte etwa so aussehen:
%Vor% Im Klartext, die Funktion beim Polling des DOM für 60 Sekunden (alle 1 Sekunde) um zu sehen, ob das Element in DOM existiert und es sichtbar ist (bedeutet Höhe und witdh größer als 1px). Wenn das Element existiert (und angezeigt wird), gibt die Funktion das gefundene Element zurück und stoppt die Abfrage (obwohl isLoaded()
method das Element in diesem speziellen Fall nicht zurückgibt).
Es macht Sinn, NoSuchElementException
zu ignorieren, das von der Methode findElement
geworfen werden kann, falls das Element nicht gefunden wird, und StaleElementException
, was anzeigt, dass ein Verweis auf ein Element jetzt "veraltet" ist - das Element nein erscheint länger im DOM der Seite. Dies bedeutet normalerweise, dass etwas (meistens JS) das DOM geändert hat und die Referenz nicht mehr gültig ist. Daher muss %%_de% es erneut suchen.
Natürlich käme auch kürzerer Code zum Einsatz, etwa so:
%Vor%Die Dokumentation ist eigentlich hübsch gut darin.
BEARBEITEN: Beantworten Sie den Kommentar:
OK, verstanden. Aber was, wenn Element nach dem Klicken auf einige vorhanden ist Schaltfläche usw.?
Nehmen wir an, Sie haben ein Szenario, in dem Sie eine Schaltfläche haben. Wenn Sie auf diese Schaltfläche klicken, wird ein Textfeld angezeigt, mit dem Sie interagieren möchten.
%Vor%Und jetzt Ihre Testklasse:
%Vor%Ein weiteres effizientes Konzept der Testseite (seit Selen 1) aus einem der Selen-Test-Frameworks - ISFW kann hier verwendet werden. Es hat Lazy geladen Element, benutzerdefinierte Komponente Feature und automatische warten (nicht implizit warten, dass die Leistung zu reduzieren), integrierte Warte-Methoden mit Element und andere Funktionen, die sehr nützlich für Ajax-Basen-Anwendung sind.
Es enthält folgende Bausteine zur Entwicklung eines Testfalls:
Zusätzlich ist Berichterstattung auch beschreibend.
Tags und Links java selenium selenium-webdriver webdriver pageobjects