0
<div> 
    <span>First line</span> 
    <p>Second line</p> 
    <span>Third line</span> 
    <p>Fourth line</p> 
</div> 

Мое требование - добраться до div и найти элементы, которые являются дочерними элементами тега div.Поиск элементов с использованием родителя в Selenium

Если я использую css-селектор как div> p: nth (0) и div> p: nth (1), я получу свои 1-й и 2-й теги p соответственно, то же самое можно применить и к диапазону.

Но есть ли ключевое слово или способ, который можно применить после достижения тега div и сказать (0), который получит мой 1-й тег span, (1), который получит мой 1-й тэг, скажем (2), который будет получите мой второй тег span, (3), который получит мой 2-й тэг.

Я не знаю, где есть путь через css-локатор или локатор xpath для достижения этого. Если есть способ, поделитесь им.

+0

Можете ли вы объяснить, что вы хотите достичь здесь? Вы хотите найти все эти теги span и p внутри div с помощью одного локатора? – debugger89

ответ

1

Да, вы можете получить дочерние элементы. Для этого вы можете использовать селектор nth-child(). Вернитесь к тегу div, а затем используйте nth-child(). Ниже приведен пример. Для простоты, я полагаю, ваш DIV тег имеет id="myId", Так, чтобы добраться до первого span элемента используется следующий селектор CSS:

[id='myId'] :nth-child(1) 

или

div#myId :nth-child(1) 

или

#myId :nth-child(1) 

все, что подходит вашему делу.

ПРИМЕЧАНИЕ: Существует пробел перед тем :nth-child(1)

Точно так же, чтобы добраться до первого p элемента:

div#myId :nth-child(2) 

и, чтобы добраться до второго span элемента:

div#myId :nth-child(3) 

и т.д.

+0

Это сработало отлично. Благодарю. –

0

Вы должны попробовать по XPath:

//div/* 

это должно получить вам все дочерние элементы.

+0

Не могли бы вы привести пример, отвечая на мой пример. –

+0

Если вы будете использовать локатор XPath, с шаблоном, который я предоставил, прежде чем вы получите массив элементов. вы должны попробовать запустить это в консоли инструментов разработчика: $ x ("// div/*"), и вы получите результаты по вашему запросу –

+0

. Это даст вам дочерние элементы * all * DIVs ... не только которые содержат SPAN и P, правильно? Это не похоже на хороший ответ на этот вопрос. – JeffC

0

- Первый ответ на ваш вопрос: Вы должны использовать Список веб-элементов. - Пример: List<WebElement> LstwebE = driver.findElements(By.xpath("//div/*"));

Вы можете использовать весь элемент, таким образом:

LstwebE.get(0); 
LstwebE.get(1); 
LstwebE.get(2); 
LstwebE.get(3); 

результат LstwebE.get(0);: <span>First line</span>

Дополнительные Примечания: - Как я понимаю, вы хотите найти одноуровневые элементы ,

  • Xpath выполнит эти требования.

  • Прежде всего получить элемент и применить братьев и сестер XPath:

Два типа братьев и сестер есть:

1. предшествующее-родственный: Для предшествующего элемента

Возьмите свои пример кода и попробуйте этот xpath для предшествующих:

//div/p[1]/preceding-sibling::span 

Этот xpath найдет первый тег <p>, а затем найдет его предыдущий тег span.

Результат XPath: <span>First line</span>

2. следующее-собрата: Для следующих элементов

Возьмите пример кода и попробовать этот XPath для следующих действий:

//div/p[1]//following-sibling::span 

Это первая найти XPath сначала <p>, а затем перейти на следующий интервал

Re Sult из XPath: <span>Third line</span>

  • Примечание: Используйте уникальный класс или атрибут сНу элемента, как://div[@class='xyz']/p[1]/preceding-sibling::span
+0

replace // div/p [1] // next-sibling :: span с // div/p [1]/next-sibling :: span –

+0

Я думаю, что оба действительны xpath. Пожалуйста, прокомментируйте больше. Что на самом деле проблема? – Sagar007

+0

Да обе работы. Сожалею. –

Смежные вопросы