Вопрос по Selenium Webdriver + Python

Добрый день! Недавно начал юзать Webdriver, столкнулся с такой проблемой:
prnt.sc/c36xny
Есть некий список, с кучей значений. Мне из этого списка нужно с помошью webdriver-a выбрать последний елемент (обозначен желтым) и в верхнем правом углу нажать Actions, чтобы появился выпадающий список.

Проблема в том, что CSS Path динамический для каждого елемента:

html
body#DiscoveryBody
div#content1.content
div#ModuleDiscovery
div.subContent
div.tabContentHolder.openTab
div#main_body
div.inlineBranch
div.contentSection.objectsList
ul#credList.UniqueId
li#credfcc07d343fa1a3f4e49a7f00000106f4.objectSummary.statusUnused
div#credMenufcc07d343fa1a3f4e49a7f00000106f4.actionMenu.closed
a

Но у последнего елемента строка ВСЕГДА имеет ближе к концу дополнение .highlight

html
body#DiscoveryBody
div#content1.
content
div#ModuleDiscovery
div.subContent
div.tabContentHolder.openTab
div#main_body
div.inlineBranch
div.contentSection.objectsList ul#credList.UniqueId li#credfcc07d343fa333dade7c7f00000106f4.objectSummary.statusUnused.highlight
div#credMenufcc07d343fa333dade7c7f00000106f4.actionMenu.closed
a

Есть ли какой-то способ выбирать всегда елемент, который в стороке содержит highlight, и забить его, например, в переменную для последующих манипуляций Webdriver-ом?

👍НравитсяПонравилось0
В избранноеВ избранном0
LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Всем спасибо! Подсказали решение с помощью CSS Selector-a:
driver.find_element_by_css_selector(’li[id^=cred].highlight’).click()

Можно по ’highlight’ найти элемент. Можно еще попробовать использовать xpath с предикатом last(), если Вы уверены, что Вам всегда нужен последний элемент из списка. www.w3schools.com/xsl/xpath_syntax.asp

XPath по классу пробовали?

Xpath в любом случае не подойдет, т.к. там вообще не к чему причцепиться. Разве что можно как-то выловить последний созданный, но я уже нашел решение через CSS Selector.

Xpath в любом случае не подойдет, т.к. там вообще не к чему причцепиться.
Да ладно... А так?
//li[contains(@class, 'hightlight')][last()]
хотя это все равно плохое решение, хрупкое... лучше бы к редко меняющемуся контенту привязываться (заголовки, метки элементов форм и т.п.)...

Тут и по XPath и по CSS-селектору, с которым сделал автор мне как-то не очень нравится.
Имхо, что бы сделать красиво нужно знать, при каком условии подсвечивается элемент (добавляется класс).
К тому же, на сколько я понял, последний созданный объект должен быть в конце списка. Если по каким-то причинам он сдвинется\не подсветится — тест упадет. Вроде бы и дефект минорный, а АТ фейлится.

Надо смотреть логику и искать красивое решение

Елемент подсвечивается при создании или изменении. ИМХО тест не полетит, т.к. перед этим шагом елемент и создается..

Можно составить XPath типа //li[contains(@class, ’highlight’)]. По нему найти веб-элемент и присвоить переменной

Жуткий вид( По моему проще использовать selenium ide что б увидеть как наилучшим образом выдернуть элемент. Либо Firefox + FirePath. А вообще да, можно)

Подписаться на комментарии