Выберите n-й согласованный узел из списка совпадающих узлов

#selenium #css-selectors

#selenium #css-селекторы

Вопрос:

Я работаю с selenium для выполнения некоторой автоматизации и пытаюсь взаимодействовать со своей веб-страницей, используя селекторы Selenium и CSS.

Мой вопрос в том, как мне выбрать n-й согласованный узел, возвращенный из списка всех совпадающих узлов?

Например, моим CSS-селектором является «.ContactName», который возвращает 2 совпадающих узла. Используя Selenium, я хочу сделать что-то вроде

 selenium.Click("css=.contactName the second match");
  

Любая помощь приветствуется.

Ответ №1:

Это то, что я в конечном итоге использовал, чтобы выбрать второй ввод с именем класса

 selenium.Click("xpath=(//input[@class='contactName'])[2]");
  

Комментарии:

1. Примечание: индексы для xpath начинаются с 1, а не с 0. поэтому nth должно быть больше 0

Ответ №2:

У этих двух узлов один и тот же родительский узел? Если это так, вы можете попробовать один из них, в зависимости от того, где они находятся под своим родительским элементом в DOM и есть ли какие-либо другие типы элементов:

 selenium.Click("css=.contactName:nth-child(2)");
selenium.Click("css=.contactName   .contactName");
selenium.Click("css=.contactName ~ .contactName");
  

Если эти два узла не имеют общего родительского элемента, вам, вероятно, придется использовать локатор XPath вместо CSS:

 selenium.Click("xpath=//*[@class='contactName'][2]");
  

Комментарии:

1. Они не находятся под одним и тем же родительским узлом. Поэтому я думаю, что я пойду с xpath. Спасибо за помощь.

2. @aahrens: Не зная, как выглядит HTML, я могу предложить только очень общее решение XPath.

3. Нет проблем, я просто изменил * на ввод, так как мне нужен был второй ввод с классом ‘ContactName’