Dort gibt es einige Möglichkeiten. Der Beispielcode ist in Java, aber ein Port zu anderen Sprachen sollte unkompliziert sein.
JavaScript:
WebElement myElement = driver.findElement(By.id("myDiv"));
WebElement parent = (WebElement) ((JavascriptExecutor) driver).executeScript(
"return arguments[0].parentNode;", myElement);
XPath:
WebElement myElement = driver.findElement(By.id("myDiv"));
WebElement parent = myElement.findElement(By.xpath("./.."));
Beziehen des Treibers von der WebElement
Hinweis: Wie Sie sehen können, benötigen Sie für die JavaScript-Version die driver
. Wenn Sie keinen direkten Zugriff darauf haben, können Sie es über Folgendes abrufen WebElement
:
WebDriver driver = ((WrapsDriver) myElement).getWrappedDriver();
By.xpath(“./..”)
, um den DOM-Baum bei der Verwendung korrekt zu durchlaufenelement.findElement
. Das führende „./“ ist erforderlich, um den Kontextknoten festzulegen.Wenig mehr darüber
XPath axes
Nehmen wir an, wir haben folgende
HTML
Struktur://span/parent::*
- gibt jedes Element zurück, das direkt übergeordnet ist.In diesem Fall ist die Ausgabe
<div class="parent">
//span/parent::div[@class="parent"]
- kehren übergeordnetes Element nur von den genauen Knotentyp und nur wenn angegebenes Prädikat ist wahr.Ausgabe:
<div class="parent">
//span/ancestor::*
- gibt alle Vorfahren (einschließlich der Eltern) zurück.Ausgang:
<div class="parent">
,<nav class="second_level_ancestor">
,<div class="third_level_ancestor">
...//span/ancestor-or-self::*
- gibt alle Vorfahren und das aktuelle Element selbst zurück.Ausgang:
<span>Child</span>
,<div class="parent">
,<nav class="second_level_ancestor">
,<div class="third_level_ancestor">
...//span/ancestor::div[2]
- gibt den zweiten Vorfahren (beginnend mit dem übergeordneten) vom Typ zurückdiv
.Ausgabe:
<div class="third_level_ancestor">
quelle
Betrachten wir Ihr DOM als
Nachdem Sie nun das übergeordnete Tag 'a' basierend auf dem
<span>
Text auswählen müssen , verwenden SieErläuterung: Wählen Sie den Knoten basierend auf dem Wert seines untergeordneten Knotens aus
quelle
div
was wiederum mit mehreren divs verschachtelt dann statt.//span
in dieBy.xpath("//div[.//span[text()='Close']]")
wir verwenden können*//span
, ist es für die meisten Eltern div Element der angegebenen Spanne aussehen wird. Jetzt wird es so aussehendriver.findElement(By.xpath("//div[*//span[text()='Close']]"));
Schauen Sie sich die möglichen XPath-Achsen an , nach denen Sie wahrscheinlich suchen
parent
. Je nachdem, wie Sie das erste Element finden, können Sie einfach den xpath dafür anpassen.Alternativ können Sie die Doppelpunktsyntax ausprobieren , mit
..
der das übergeordnete Element des aktuellen Knotens ausgewählt wird.quelle
Dies kann für eine andere Person nützlich sein: Verwenden dieses Beispiel-HTML
Wenn ich beispielsweise ein Element im selben Abschnitt (z. B. div) als Beschriftung auswählen möchte, können Sie dies verwenden
Dies bedeutet nur, für ein Etikett (es könnte so etwas wie
a
,h2
) genanntlabelName
. Navigieren Sie zum übergeordneten Element dieser Bezeichnung (dhdiv class="ParentDiv"
). Suchen Sie in den Nachkommen dieses Elternteils nach einem untergeordneten Element mit dem Wert vonelementToSelect
. Damit wird die zweiteelementToSelect
mitDontSelect
div als übergeordnetem Element nicht ausgewählt .Der Trick besteht darin, dass Sie die Suchbereiche für ein Element reduzieren können, indem Sie zuerst zum übergeordneten Element navigieren und dann den Nachkommen dieses übergeordneten Elements nach dem gewünschten Element suchen.
following-sibling::h2
In einigen Fällen kann auch eine andere Syntax verwendet werden. Dies bedeutet das folgende Geschwisterelementh2
. Dies funktioniert für Elemente auf derselben Ebene mit demselben übergeordneten Element.quelle
Sie können dies tun, indem Sie / parent :: node () im xpath verwenden. Hängen Sie einfach / parent :: node () an den xpath der untergeordneten Elemente an.
Beispiel: xpath des untergeordneten Elements sei childElementXpath .
Dann wäre xpath seines unmittelbaren Vorfahren childElementXpath / parent :: node () .
Xpath seines nächsten Vorfahren wäre childElementXpath / parent :: node () / parent :: node ()
und so weiter..
Sie können auch mit zu einem Vorfahren eines Elements navigieren
'childElementXpath/ancestor::*[@attr="attr_value"]'
. Dies ist nützlich, wenn Sie ein bekanntes untergeordnetes Element haben, das eindeutig ist, aber ein übergeordnetes Element hat, das nicht eindeutig identifiziert werden kann.quelle
Wir können das übergeordnete Tag mit Hilfe von Selen wie folgt auswählen:
Dies wird Ihnen helfen, den Großelternteil des bekannten Elements zu finden. Entfernen Sie einfach eines (/ ..), um das unmittelbare übergeordnete Element zu finden.
Mögen:
Es gibt einige andere Möglichkeiten, dies zu implementieren, aber es hat für mich gut funktioniert.
quelle