Wie suchen Sie die Dynamische WebElement mit WebDriver
Automatisierung-Spezifikation - basierend auf Java WebDriver
Hallo
ich arbeite an einem webdriver automation(Java-code) zu automatisieren bus Buchung an.
Hier ist mein Szenario....
(1)Abfahrt & Ziel - GETAN
(2) Wählen Sie das Datum - GETAN
(3)Suche Bus -GETAN
(4)Ansicht-Sitze & Select- ich hier Getroffen
Nun als Ergebnis einer Suche, habe ich eine Liste der Busse mit der option zum anzeigen der Sitze.
die Liste der Busse sind in einem dynamic-DataTable, die enthält ein Bild namens " anzeigen seat' in jeder Zeile. Ein Klick auf die viewseat-Bild wird mir das Sitz-layout, wo ich auswählen kann das Sitze. fand die viewseat-Bilder sind mit verschiedenen id ' s & die gleichen Klasse name. Jetzt muss ich zu suchen Sie, und klicken Sie auf die viewseat-image je nachdem, was ich will, mittels seiner id.
Aber die situation ist
* die Daten-Tabelle ist dynamisch, Sodass die id ' s verändern, die mir nicht erlaubt, Sie durch eine statische id.
* id ist die einzige Sache, die Codierung zu unterscheiden, die viewseat-Bild von einem anderen. so kann ich es gefunden nur wenn ich die id korrekt.
Nun meine Idee ist es, bekommen der Laufzeit-id 's von allen viewseat-Bilder, mit dem eindeutigen Klassennamen und speichern Sie in Variablen und verwenden Sie die id' s um das element zu suchen.
Also lassen Sie mich wissen, wenn es keine Möglichkeit zu Holen Sie sich die IDS aller Bilder in die Daten-Tabelle, mit den Namen der Klasse.
- Haben Sie versucht, mit einem anderen Selektor anstatt die ID für die Sitze? Xpath, CSS, etc. Wenn man eine html-code-snippet als Teil deiner Frage wird es leichter sein, Sie zu unterstützen.
- Ich versuchte zu. aber ich konnte nur finden, ID & class-Namen im HTML. hier ist der HTML-code für eine viewseat-Bild, das oben erwähnt wird..
<a id="100001610410140976/2013-11-07" class="pop-up viewSeatsButtonStyle" href="javascript:void(0);">View seats</a>
- Es gibt auch andere Auswahlen als nur die ID, name, classname etc. Manchmal müssen Sie mit den 'hässlicher' Methoden der xpath oder css. Wenn Sie hinzufügen könnte, in ein html-snippet von einem Teil der Tabelle, anstatt nur von diesem Anker kann ich versuchen, und zeigen Sie in die richtige Richtung.
- danke @MarkRowlands. auch ich sah für Klassenname,name,cssSelector. aber Couln ' T finden. Und unsere Entwickler sind mit hte DataTable anstelle der Grid-Ansicht zeigen dieser Liste.Also HTML-snippet wird der Tisch zu hart für Sie, wenn geben, da es enthält eine Hölle outa css-tags. damit gebe ich Ihnen die übersicht der Tabelle. Die Tabelle enthält Spalten wie REIST NAMEN, DEP ZEIT, ARRIV ZEIT, PREIS,schließlich VIEWSEAT Bild.
- also ich gebe dir den Ausschnitt für Reiseveranstalter & viewSeat allein.
<a id="103838910410032127" class="cancel cancelonwards" name="2013-11-07" href="#" style="color:#4A5892;font-size:11px;font-family:Verdana;font-weight:200;">Canc.Policy</a> <a id="103838910410032127/2013-11-07" class="pop-up viewSeatsButtonStyle" href="javascript:void(0);">View seats</a>
- Ok können Zurückspulen, weil, leider, ich bin verwirrt von dem, was Sie gesagt haben. Egal. Ihre ursprüngliche Frage war, wie man die Sitze und klicken Sie auf Sie. Wenn ich verfolgt habe deine Beschreibung richtig, der Sitz-Elemente sollten in der
'View seats'
element. S0 -Webdriver element = driver.findElement(By.linkText("View seats")); List<WebElement> seats = element.findElements(By.xpath("//the-xpath-tag-for-each-seat"));
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie den absoluten Pfad und die Position der Sitzfläche, die reduzieren Sie Ihre Anstrengungen, den absoluten Pfad können Sie installieren ein plug-in in firefox namens "firepath", nach der Installation werden Sie eine option zum auswählen von entweder absoluter Pfad oder RelativePath. Mit dem absoluten Pfad brauchen Sie nicht, verwenden Sie ID zum identifizieren das element, das dynamisch erstellt wird. Der Weg ist gekennzeichnet mit der Lage der Elemente innerhalb der tags.
Beispiel für Absoluten Pfad:
//div/div/div/table/tbody/tr/td[2]/div/input[3]
Können Sie versuchen, diese Methode.Aber ich bin nicht sicher, es kann klappen.Ich bin auf der Suche nach einer Allgemeinen Weise, die das problem lösen können, bei dynamischen Seiten.
Hier, wenn die Dynamik-Daten-Tabelle kommen, so können Sie speichern die Größe in der Tabelle, Wie :
Und können eine Schleife, die Lesen würde jede verfügbare Zeile der Tabelle, oder Sie können klicken Sie auf Sie eins nach dem anderen. Wie :
Nun Sie können Lesen oder klicken Sie auf jede Zeile in der Tabelle, obwohl Zeilen kommen dynamisch.Ich hoffe es hat dir geholfen!
Weitere Erklärung oder ein Beispiel, das ich vorziehen würde: Wie automatisiert eine Dynamische Seite durch Selenium Web Driver