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

Как найти кнопку в таблице, если не знаешь ничего кроме текста в строке.

python
selenium
webdriver
Теги: #<Tag:0x00007f7b70580cd0> #<Tag:0x00007f7b70580b40> #<Tag:0x00007f7b70580a00>

(Наталия Гвоздик) #1

Помогите, пожалуйста найти кнопку в таблице.
Таблица выглядит так:


Я создаю елемент в таблице, у него постоянно разное положение. Все что у меня есть это его название.После создания хотелось бы его удалить, а вот как именно найти его не пойму.

    list_elements = driver.find_elements_by_class_name('attribute-name')
    l = driver.find_element_by_class_name('attribute-name')
    for l in list_elements: 
         print l.text

Вот так мне выводит название всех строк в таблице, как из них получить только с определенным текстом внутри и его например xpath?


(Konstantin) #2

можно сделать так:
взять лист всех элементов до создания и после создания, выкинуть дубликаты и останется 1, на него и кликать


(Ray Romanov) #3

Использовать якорный XPath.
Согласно правой части скриншота у меня получается так:

.//tr/td[@class="attribute-name" and contains(text(), "test 1234")]/../td/div/a[@data-target="#confirm-delete"]

(Наталия Гвоздик) #4

Спасибо! Получилось:blush:


(Антон) #5

Могу предложить воспользоваться HTMLElements и представить строки таблицы как какстомный элемент.
Искать все такие элементы на странице, потом найти элемент, у которого есть нужный тебе текст (метод найти текст реализуется в классе кастомного элемента), а потом воспользоваться методом клика на кнопку так-же реализованном в классе кастомного элемента.
Таким образом у тебя не будет трехэтажных xPath (хотя такое тоже реально сделать), будет гараздо легче работать с подобными элементами и не будет проблем если в нужном тебе тексте будут комбинации кавычек :slight_smile:

Подробности про такой подход тут


(Ярослав Бойко) #6
(//a[@title='Delete'])[8]

(Ray Romanov) #7

Читаем вопрос внимательно…


(Konstantin) #8

Читаем ответ внимательно … ))


(Konstantin) #9

былобы ещё конечно полезно узнать как именно получилось


(Наталия Гвоздик) #10
driver.find_element_by_xpath('.//tr/td[@class="attribute-name" and contains(text(), "test 1234")]/../td/div/a[@data-target="#confirm-delete"]').click()