Selen 2 - Kann findElement(By.xpath) eingeschränkt werden auf ein bestimmtes element?
Alle Beispiele von findElement(By.xpath -) ich habe gesehen, Suche die ganze Seite, z.B.
WebElement td = driver.findElement(By.xpath("//td[3]"));
Was ich erreichen will, ist dies:
WebElement tr = ... //find a particular table row (no problem here)
WebElement td = tr.findElement(By.xpath("/td[3]")); //Doesn't work!
Ich habe auch versucht andere Variationen ohne Glück: "td[3]", "child::td[3]"
Mit "//td[3]" sucht den ersten übereinstimmenden Knoten in die ganze Seite, D. H. nicht nur beschränkt auf meine tr. So sieht es gerne, wenn Sie findElement von xpath, die WebElement auf, die Sie nennen, findElement() zählt nichts.
Ist es möglich, Umfang findElement(By.xpath) zu einem bestimmten WebElement?
Bin(ich verwende Chrome, falls es darauf ankommt.)
BITTE BEACHTEN Sie: Durch.xpath("//td[3]") ist nur ein Beispiel. Ich bin nicht auf der Suche nach alternativen Möglichkeiten, um die gleiche Sache. Die Frage ist nur um zu versuchen, um festzustellen, ob foo.findElement() nimmt keine Notiz von foo wenn Sie mit einem Durch.xpath-Selektor.
InformationsquelleAutor David Easley | 2011-08-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Basierend auf ZzZ Antwort ich denke das Problem ist, dass die Abfragen, die Sie versuchen werden mit absoluten statt relativen. Durch die Verwendung einer ab
/
Sie force-absolute-Suche. Stattdessen verwenden Sie die tag-Namen als ZzZ vorgeschlagen,./
oder.//
.Blick in die XPath-docs unter "Pfad-Ausdruck"
InformationsquelleAutor
Ich lief auch in dieser Ausgabe, und verbrachte ziemlich viel Zeit damit, herauszufinden, die Problemumgehung. Und das ist was ich herausgefunden:
Nicht sicher, warum, aber das funktioniert für mich.
WebDriver hung/auf mich gewartet, bis ich änderte die implizite Wartezeit wieder auf 0 (die Standardeinstellung). seleniumhq.org/docs/04_webdriver_advanced.html#implicit-waits
InformationsquelleAutor
Ich denke, das könnte ein bug in der Weise, dass Selenium2 verwendet xpath. Ich glaube jedoch, ich habe erfolgreich beschränkt sich der Umfang mit "::ancestor" vor.
In jedem Fall, haben Sie versucht, mit Css-Selektoren um dieses Problem zu lösen? Ist das eine option für dich? Versuchen Sie dies:
tr.findElement(By.cssSelectors("td:nth-of-type(3)"));
Dieser sollte den job tun, und ist das äquivalent von dem, was Sie versucht zunächst:
tr.findElement(By.xpath("//td[3]"));
InformationsquelleAutor
InformationsquelleAutor
Wenn Sie nur wollen, um zu finden, die Kind-Elemente des tr verwenden Sie einen relativen Pfad und nicht absolut.
Sollte dies funktionieren:
InformationsquelleAutor