Там есть пара вариантов. Пример кода написан на Java, но перенос на другие языки должен быть простым.
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("./.."));
Получение драйвера из WebElement
Примечание. Как видите, для версии JavaScript вам понадобится расширение driver
. Если у вас нет прямого доступа к нему, вы можете получить его с WebElement
помощью:
WebDriver driver = ((WrapsDriver) myElement).getWrappedDriver();
By.xpath(“./..”)
чтобы правильно пройти по дереву DOM при использованииelement.findElement
. Ведущий «./» требуется для установки контекстного узла.Еще немного о
XPath axes
Допустим, у нас есть
HTML
структура ниже ://span/parent::*
- возвращает любой элемент, являющийся прямым родителем.В этом случае вывод
<div class="parent">
//span/parent::div[@class="parent"]
- возвращает родительский элемент только точного типа узла и только если указанный предикат истинен.Вывод:
<div class="parent">
//span/ancestor::*
- возвращает всех предков (включая родителя).Выход:
<div class="parent">
,<nav class="second_level_ancestor">
,<div class="third_level_ancestor">
...//span/ancestor-or-self::*
- возвращает все предков и сам текущий элемент.Выход:
<span>Child</span>
,<div class="parent">
,<nav class="second_level_ancestor">
,<div class="third_level_ancestor">
...//span/ancestor::div[2]
- возвращает второго предка (начиная с родительского) типаdiv
.Вывод:
<div class="third_level_ancestor">
источник
Рассмотрим вашу DOM как
Теперь, когда вам нужно выбрать родительский тег 'a' на основе
<span>
текста, используйтеОбъяснение: Выберите узел на основе значения его дочернего узла.
источник
div
который снова вложенный с несколькими дивами , то вместо того , чтобы.//span
вBy.xpath("//div[.//span[text()='Close']]")
мы можем использовать*//span
, это будет выглядеть для большинства родительского сНу элемента данного диапазона. Теперь это будет выглядеть такdriver.findElement(By.xpath("//div[*//span[text()='Close']]"));
Взгляните на возможные оси XPath , которые вы, вероятно, ищете
parent
. В зависимости от того, как вы находите первый элемент, вы можете просто настроить для него xpath.В качестве альтернативы вы можете попробовать синтаксис с двумя точками ,
..
который выбирает родительский элемент текущего узла.источник
Это может быть полезно для кого-то еще: Использование этого образца html
Если, например, я хочу выбрать элемент в том же разделе (например, div) в качестве метки, вы можете использовать это
Это просто означает, обратите внимание на этикетку (он мог что - нибудь подобное
a
,h2
) называетсяlabelName
. Перейдите к родительскому элементу этой метки (т.е.div class="ParentDiv"
). Выполните поиск среди потомков этого родителя, чтобы найти любой дочерний элемент со значениемelementToSelect
. При этом он не будет выбирать второйelementToSelect
сDontSelect
div в качестве родителя.Хитрость заключается в том, что вы можете уменьшить области поиска для элемента, сначала перейдя к родительскому элементу, а затем выполнив поиск в потомке этого родителя для нужного вам элемента. В
following-sibling::h2
некоторых случаях также можно использовать другой синтаксис . Это означает, что за элементом следует элементh2
. Это будет работать для элементов на одном уровне, имеющих одного и того же родителя.источник
Вы можете сделать это, используя / parent :: node () в xpath. Просто добавьте / parent :: node () к дочерним элементам xpath.
Например: пусть xpath дочернего элемента - childElementXpath .
Тогда xpath его непосредственного предка будет childElementXpath / parent :: node () .
Xpath его следующего предка будет childElementXpath / parent :: node () / parent :: node ()
и так далее..
Кроме того, вы можете перейти к предку элемента с помощью
'childElementXpath/ancestor::*[@attr="attr_value"]'
. Это было бы полезно, когда у вас есть известный дочерний элемент, который уникален, но имеет родительский элемент, который нельзя однозначно идентифицировать.источник
Мы можем выбрать родительский тег с помощью Selenium следующим образом:
это поможет вам найти прародителя известного элемента. Просто удалите один (/ ..), чтобы найти непосредственный родительский элемент.
Подобно:
Есть и другие способы реализовать это, но у меня это сработало.
источник