Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Нахождение последнего элемента в WebElement


(svim) #1

Необходимо получить все элементы на веб-странице с классом someElement (является дивом), и из списка текущих, выбрать самый последний и получить его содержимое(текст). Как сделать это средствами WebElement - не пойму, следуюзей записью получаю содержимое всех элементов с классом someElement.

List<WebElement> lastElement = element.findElements(By.className("someElement"));

for(WebElement ls : lastElement) {

            ls.getText();

 }

 

Как правильно реализовать получение последнего значения из ls?

 

 

 

 


(streLer) #2

если я правильно понял, попробуйте так по аналогии, скинькод страницы  лучше

driver.findElement(By.cssSelector("table.specialOffers > tbody > tr > td:last-child > span")).getText()


(Evgenij.Malikov) #3

Xpath

String youName = driver.findElement(By.xpath("//div[@class='someElement'][last()]")).getText()


(svim) #4

С lust() пробовал, но выделяет почему-то все элементы http://d.pr/i/glY1

 


(mikhail.sidelnikov) #5

Всё достаточно просто:

lastElement.get(lastElement.size - 1)

 


(Evgenij.Malikov) #6

Самый неудобный варинт:

//div[@class='file approve customer'][last()]/div/a

Дальше можно делать проще


(vmaximv) #7

//div[@class=‘someElement’][position()=last()]


(vmaximv) #8

В теории да - на практике никто не гарантирует, что браузер будет возвращать элементы в том порядке, в котором они встречаются в DOM.


(taras_t) #9

З lust() краще не пробувати ;)

А якщо серйозно, то XPath має бути (//*[@class="SOME_CLASS"])[last()].
Тобто (//*[@class="SOME_CLASS"]) - створює групу елементів з певним класом, до якої потім застосовується селектор [last()]


(svim) #10

Дякую ;-)


(mikhail.sidelnikov) #11

Ну тут лишь можно обратиться к исходникам вебдрайвера чтоб понять, как он будет возвращать элементы. Я тут глянул - в явном виде не понятно. Но что-то мне подсказывает(и это что-то - не только свой опыт) , что будет он возращать именно в том же порядке как и в DOM.


(vmaximv) #12

Селениум тут не при чем - он вернет их вам и том же порядке, в котором получил от браузера, который в свою очередь получил их либо от вызова нативных методов, либо от вызовов заинжектенных селениумом либ. Которые, в свою очередь, теоретически (следуя спецификациям) должны вернуть в порядке следования в DOM, а на практике естественно ни кому ни чего не должны.