Sélectionnez l'élément parent de l'élément connu en Sélénium
J'ai un certain élément que je peux sélectionner avec Le sélénium 1.
Malheureusement, j'ai besoin de cliquer sur l'élément parent pour obtenir le comportement désiré. L'élément que je peux trouver facilement a l'attribut ne peut pas être sélectionnée, rendant morts pour cliquant. Comment puis-je naviguer vers le haut avec XPath?
Vous devez vous connecter pour publier un commentaire.
Il ya un couple d'options. L'exemple de code est en Java, mais un port à d'autres langues doit être simple.
JavaScript:
XPath:
Obtenir le pilote à partir du
WebElement
Remarque: Comme vous pouvez le voir, pour la version JavaScript, vous aurez besoin de la
driver
. Si vous n'avez pas d'accès direct, vous pouvez le récupérer à partir de laWebElement
à l'aide de:By.xpath(“./..”)
correctement marcher jusqu'à l'arbre du DOM lors de l'utilisation deelement.findElement
. Le chef de file “./“ est nécessaire pour fixer le nœud de contexte.Peu plus à propos de
XPath axes
Permet de dire que nous avons ci-dessous
HTML
structure://span/parent::*
- retours tout de l'élément parent direct.Dans ce cas, la sortie est
<div class="parent">
//span/parent::div[@class="parent"]
- retourne l'élément parent seulement exacte type de nœud et seulement si spécifié prédicat est Vrai.De sortie:
<div class="parent">
//span/ancestor::*
- retours tous ancêtres (y compris les parents).De sortie:
<div class="parent">
,<nav class="second_level_ancestor">
,<div class="third_level_ancestor">
...//span/ancestor-or-self::*
- retours tous ancêtres et actuel de l'élément lui-même.De sortie:
<span>Child</span>
,<div class="parent">
,<nav class="second_level_ancestor">
,<div class="third_level_ancestor">
...//span/ancestor::div[2]
- retours deuxième ancêtre (à partir de parent) de typediv
.De sortie:
<div class="third_level_ancestor">
Prendre un coup d'oeil à la possible XPath axes, vous êtes probablement à la recherche pour
parent
. En fonction de comment vous trouver le premier élément, vous pouvez simplement ajuster le xpath pour que.Sinon, vous pouvez essayer le double-syntaxe à point,
..
qui sélectionne le parent du nœud actuel.Considérons votre DOM comme
Maintenant que vous avez besoin de sélectionner une balise parent 'a' sur la base de
<span>
texte, puis utilisezExplication: Sélectionnez le nœud basé sur son enfant de valeur du nœud
div
, qui est de nouveau imbriquée avec plusieurs divs alors au lieu de.//span
dansBy.xpath("//div[.//span[text()='Close']]")
nous pouvons utiliser*//span
, il va chercher pour la plupart des div parent de l'élément d'écartement donné. Maintenant, il ressemblera à cecidriver.findElement(By.xpath("//div[*//span[text()='Close']]"));
Cela peut être utile pour quelqu'un d'autre:
À l'aide de cet exemple de code html
Si par exemple, je veux sélectionner un élément dans la même section (e.g div), comme une étiquette, vous pouvez utiliser cette
Cela signifie simplement que, pour un look étiquette (il pourrait être quelque chose comme
a
,h2
) appelélabelName
. Accédez à la mère de l'étiquette (c'est à dirediv class="ParentDiv"
). Recherche dans les descendants de ce parent à trouver n'importe quel enfant de l'élément avec la valeur deelementToSelect
. Avec cela, il ne sélectionne pas le secondelementToSelect
avecDontSelect
div parent.Le truc, c'est que vous pouvez réduire les zones de recherche pour un élément en accédant à la mère d'abord et ensuite à la recherche des descendants de ce parent de l'élément dont vous avez besoin.
D'autres Syntaxe comme
following-sibling::h2
peut également être utilisé dans certains cas. Cela signifie que le frère élément suivanth2
. Cela fonctionne pour les éléments au même niveau, ayant le même parent.Vous pouvez le faire en utilisant /parent::node() le xpath. Ajoutez-y simplement /parent::node() à l'enfant des éléments de xpath.
Par exemple:
Laissez xpath de l'élément enfant est childElementXpath.
Puis xpath de son ancêtre immédiat serait childElementXpath/parent::node().
Xpath de son ancêtre serait childElementXpath/parent::node()/parent::node()
et ainsi de suite..
Aussi, vous pouvez naviguer jusqu'à un ancêtre d'un élément à l'aide de
'childElementXpath/ancestor::*[@attr="attr_value"]'
. Cela peut être utile lorsque vous avez un enfant connu élément, qui est unique, mais a un élément parent qui ne peut pas être identifié de façon unique.Nous pouvons sélectionner la balise parent avec l'aide de Sélénium comme suit:
cela vous aidera à trouver la grand-parent de l'Élément connu. Juste Enlever une (/..) pour trouver l'Élément Parent immédiat.
Comme:
Il ya d'autres façons de mettre en œuvre, mais il a bien fonctionné pour moi.