Hay un par de opciones ahí. El código de muestra está en Java, pero la adaptación a otros lenguajes debería ser sencilla.
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("./.."));
Obtener el controlador del WebElement
Nota: Como puede ver, para la versión de JavaScript necesitará driver
. Si no tiene acceso directo a él, puede recuperarlo WebElement
usando:
WebDriver driver = ((WrapsDriver) myElement).getWrappedDriver();
By.xpath(“./..”)
para subir correctamente el árbol DOM cuando se usaelement.findElement
. El "./" inicial es necesario para establecer el nodo de contexto.Poco más sobre
XPath axes
Digamos que tenemos la siguiente
HTML
estructura://span/parent::*
- devuelve cualquier elemento que sea padre directo.En este caso la salida es
<div class="parent">
//span/parent::div[@class="parent"]
- devuelve el elemento padre solo del tipo de nodo exacto y solo si el predicado especificado es Verdadero.Salida:
<div class="parent">
//span/ancestor::*
- devuelve todos los antepasados (incluido el padre).Salida:
<div class="parent">
,<nav class="second_level_ancestor">
,<div class="third_level_ancestor">
...//span/ancestor-or-self::*
- devuelve todos los antepasados y el elemento actual en sí.Salida:
<span>Child</span>
,<div class="parent">
,<nav class="second_level_ancestor">
,<div class="third_level_ancestor">
...//span/ancestor::div[2]
- devuelve el segundo ancestro (comenzando por el padre) de tipodiv
.Salida:
<div class="third_level_ancestor">
fuente
Consideremos su DOM como
Ahora que necesita seleccionar la etiqueta principal 'a' según el
<span>
texto, utiliceExplicación: seleccione el nodo según el valor de su nodo secundario
fuente
div
que está anidado de nuevo con varias Div entonces en vez de.//span
enBy.xpath("//div[.//span[text()='Close']]")
que podemos utilizar*//span
, que se verá durante la mayor parte de los padres elemento div del rango dado. Ahora se verá asídriver.findElement(By.xpath("//div[*//span[text()='Close']]"));
Eche un vistazo a los posibles ejes XPath que probablemente esté buscando
parent
. Dependiendo de cómo encuentre el primer elemento, puede ajustar el xpath para eso.Alternativamente, puede probar la sintaxis de doble punto ,
..
que selecciona el padre del nodo actual.fuente
Esto podría ser útil para otra persona: Usar este HTML de muestra
Si, por ejemplo, quiero seleccionar un elemento en la misma sección (por ejemplo, div) como etiqueta, puede usar esto
Esto sólo significa, busque una etiqueta (Podría algo así
a
,h2
) llamadolabelName
. Navegue hasta el padre de esa etiqueta (es decirdiv class="ParentDiv"
). Busque dentro de los descendientes de ese padre para encontrar cualquier elemento hijo con el valor deelementToSelect
. Con esto, no seleccionará el segundoelementToSelect
conDontSelect
div como padre.El truco es que puede reducir las áreas de búsqueda de un elemento navegando primero al padre y luego buscando el elemento que necesita en el descendiente de ese padre.
following-sibling::h2
En algunos casos también se pueden utilizar otras sintaxis similares . Esto significa el elemento siguiente del hermanoh2
. Esto funcionará para elementos del mismo nivel, que tengan el mismo padre.fuente
Puede hacer esto usando / parent :: node () en el xpath. Simplemente agregue / parent :: node () a los elementos secundarios xpath.
Por ejemplo: Sea xpath del elemento hijo childElementXpath .
Entonces xpath de su antepasado inmediato sería childElementXpath / parent :: node () .
XPath de su próximo antepasado sería childElementXpath / parent :: node () / parent :: node ()
y así..
Además, puede navegar a un ancestro de un elemento usando
'childElementXpath/ancestor::*[@attr="attr_value"]'
. Esto sería útil cuando tiene un elemento hijo conocido que es único pero tiene un elemento padre que no se puede identificar de forma única.fuente
Podemos seleccionar la etiqueta principal con la ayuda de Selenium de la siguiente manera:
esto te ayudará a encontrar al abuelo del Elemento conocido. Simplemente elimine uno (/ ..) para encontrar el elemento principal inmediato.
Me gusta:
Hay otras formas de implementar esto, pero funcionó bien para mí.
fuente