Как выбрать первый элемент из найденных.

java
locators
css-selectors
selenium
webdriver
Теги: #<Tag:0x00007fedbb7b2810> #<Tag:0x00007fedbb7b2540> #<Tag:0x00007fedbb7b22c0> #<Tag:0x00007fedbb7b2090> #<Tag:0x00007fedbb7b1d48>

(pauloo89) #21

driver.findElements(By.xpath("//input[contains(@id,‘ПН’)][last()]"))

result size=2


(Bolatbek) #22

Если в FirePath посмотреть? Сколько элементов выделит?


(pauloo89) #23

два


(pauloo89) #24

li:first-child [id^=‘ПН_’] в firePath этот запрос показывает первый Элемент
в селениуме не находит ничего
li:last-child [id^=‘ПН_’] и там и там не находит


(Bolatbek) #25

Тогда по старинке)) считаем элементы и берем по индексу)


(pauloo89) #26

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


(pauloo89) #27

просто странно что он выбирает первый отдельно а последний отдельно нет ну если селектор css писать


(Bolatbek) #28

У меня (или верстка у нас правильная) - последний элемент нормально выделяется.
Может код хтмл дашь?


(pauloo89) #29

под цифрой один схлопнутый li
под цифрой два развернутый li и собственно тот элемент который я ищу,
[id^=‘ПН_’] такой поиск находит оба элемента,
li:first-child [id^=‘ПН_’] такой находит как раз первый который схлопнут

li:last-child [id^=‘ПН_’] вот этот должен находить элемент под цифрой два но он не находит ничего

driver.findElements(By.xpath("//input[contains(@id,‘ПН’)][last()]")) такой вариант находит оба элемента


(Bolatbek) #30

Ошибся, с contains такая фишка не пройдет )))
Сейчас решим.

Если у тебя в “li” только один input c типом “radio”, тогда ищи по xpath путь до этого инпута с этим типом и тогда будет работать и last() и [x].

Что-то типа:

.//*[@id='profselection']/ul/li/input[@type='radio'][1]
.//*[@id='profselection']/ul/li/input[@type='radio'][last()]


(vmaximv) #31

А если нет?
:popcorn:


(pauloo89) #32

driver.findElement(By.xpath(".//*[@id=‘profselection’]/ul/li/input[@type=‘radio’][last()]")).click();
в этом варианте кликает по первому


(pauloo89) #33

(.//*[@id=‘profselection’]/ul/li/input[@type=‘radio’][last()])

в firebage выбирает оба


(Bolatbek) #34
.//*[@id='profselection']/ul/li[last()]/input[contains(@id,'ПН')]

Суть - из всех li, входящих в ul, ищем последний, а потом внутри - нужный инпут ))).

Такую задачу не решал, самому интересно.


(pauloo89) #35

я так пробовал не получилось


(Bolatbek) #36

На работе пробую.
Конструкция вида:

.//*[@id='container']/div[last()]/div[contains(@id, "content")]

Дает мне нужный результат


(vmaximv) #37

Извините, что вмешиваюсь в ваш чат, но вам осталось лишь правильно расставить скобки в:


(pauloo89) #38

) почему наш то), он общий, сейчас буду пробовать


(Bolatbek) #39

)))
неплохой чат вышел.
Надо оживить форум.


(pauloo89) #40

что то я не могу найти какие, подскажите