#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’