Existem algumas opções lá. O código de amostra está em Java, mas uma porta para outras linguagens deve ser direta.
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("./.."));
Obtendo o driver do WebElement
Nota: Como você pode ver, para a versão JavaScript você precisará do driver
. Se você não tiver acesso direto a ele, pode recuperá-lo WebElement
usando:
WebDriver driver = ((WrapsDriver) myElement).getWrappedDriver();
By.xpath(“./..”)
para subir corretamente a árvore DOM ao usarelement.findElement
. O primeiro “./“ é necessário para definir o nó de contexto.Um pouco mais sobre
XPath axes
Digamos que temos a
HTML
estrutura abaixo ://span/parent::*
- retorna qualquer elemento que seja pai direto.Neste caso, a saída é
<div class="parent">
//span/parent::div[@class="parent"]
- retorna o elemento pai apenas do tipo de nó exato e apenas se o predicado especificado for True.Resultado:
<div class="parent">
//span/ancestor::*
- retorna todos os ancestrais (incluindo o pai).Saída:
<div class="parent">
,<nav class="second_level_ancestor">
,<div class="third_level_ancestor">
...//span/ancestor-or-self::*
- retorna todos os ancestrais e o próprio elemento atual.Saída:
<span>Child</span>
,<div class="parent">
,<nav class="second_level_ancestor">
,<div class="third_level_ancestor">
...//span/ancestor::div[2]
- retorna o segundo ancestral (começando do pai) do tipodiv
.Resultado:
<div class="third_level_ancestor">
fonte
Vamos considerar o seu DOM como
Agora que você precisa selecionar a tag pai 'a' com base no
<span>
texto, useExplicação: Selecione o nó com base no valor de seu nó filho
fonte
div
qual está novamente aninhado com vários divs, então, em vez de.//span
inBy.xpath("//div[.//span[text()='Close']]")
, podemos usar*//span
, ele irá procurar a maioria dos elementos div pai de determinado período. Agora será parecido com istodriver.findElement(By.xpath("//div[*//span[text()='Close']]"));
Dê uma olhada nos possíveis eixos XPath que você provavelmente está procurando
parent
. Dependendo de como você está encontrando o primeiro elemento, você pode apenas ajustar o xpath para isso.Como alternativa, você pode tentar a sintaxe de ponto duplo ,
..
que seleciona o pai do nó atual.fonte
Isso pode ser útil para outra pessoa: Usando este exemplo de html
Se, por exemplo, eu quiser selecionar um elemento na mesma seção (por exemplo, div) como um rótulo, você pode usar este
Isso significa apenas, procure um rótulo (poderia ser qualquer coisa como
a
,h2
) chamadolabelName
. Navegue até o pai dessa etiqueta (ou sejadiv class="ParentDiv"
). Pesquise nos descendentes desse pai para encontrar qualquer elemento filho com o valor deelementToSelect
. Com isso, ele não selecionará o segundoelementToSelect
comDontSelect
div como pai.O truque é que você pode reduzir as áreas de pesquisa de um elemento navegando até o pai primeiro e, em seguida, pesquisando no descendente desse pai o elemento de que você precisa. Outra sintaxe semelhante
following-sibling::h2
também pode ser usada em alguns casos. Isso significa o elemento irmão seguinteh2
. Isso funcionará para elementos no mesmo nível, tendo o mesmo pai.fonte
Você pode fazer isso usando / parent :: node () no xpath. Simplesmente anexe / parent :: node () aos elementos filhos xpath.
Por exemplo: Deixe xpath do elemento filho ser childElementXpath .
Então xpath de seu ancestral imediato seria childElementXpath / parent :: node () .
Xpath de seu próximo ancestral seria childElementXpath / parent :: node () / parent :: node ()
e assim por diante..
Além disso, você pode navegar até um ancestral de um elemento usando
'childElementXpath/ancestor::*[@attr="attr_value"]'
. Isso seria útil quando você tiver um elemento filho conhecido que é único, mas possui um elemento pai que não pode ser identificado exclusivamente.fonte
Podemos selecionar a tag pai com a ajuda do Selenium da seguinte maneira:
isso o ajudará a encontrar o avô do elemento conhecido. Basta remover um (/ ..) para encontrar o elemento pai imediato.
Gostar:
Existem algumas outras maneiras de implementar isso, mas funcionou bem para mim.
fonte