Найти CSS Selector имея id другого элемента в этом же ряду (внутри таблицы)

locators
css-selectors
Теги: #<Tag:0x00007fedb90f7b08> #<Tag:0x00007fedb90f79c8>

#1

Пытаюсь решить вот такую задачу, есть таблица -


Мне нужно нажать на кнопку “View PDF”
Но в этом ряду уникальный локатор только у первого столбца в таблице
tbody tr input[value*='35702']

Возможно ли как-то “танцуя от него” нажать на вью пдф?


(rmerkushin) #2

Попробуйте это https://css-tricks.com/child-and-sibling-selectors/ но я не уверен что поможет.
Не проще ли использовать #xpath ? #css-selectors не такие гибкие.


(Ray Romanov) #3

В данном случае только #xpath , только он позволяет двигаться по #dom дереву вперед/назад.


(Алеся) #4

не знаю, что внутри td, который по середине, но если там нет a можно попробовать:

tbody>tr>td>div>a 

или

table[class*='table']>tbody>tr>td+td+td+td+td+td+td+td>div>a

но лучше в данном случае #xpath !


(Roma Marinsky) #5

C помощью css нельзя такого сделать. Лучше через #xpath

//*[contains(@id, '35702')]//..//а[.='View PDF']

Или если у вас selenide, то можно

$("[id*='35702']").parent().$(withText("View PDF")).click();

Но всё же как видишь чуть короче с помощью xpath


(Dzmitry Ihnatsyeu) #6

зачем вообще строить #xpath или #css если у #webdriver есть findElement(By.link_text)? в питоне я уверен есть тоже аналог.


(Alexander Zvonov) #7

Если findElement(By.link_text) работает, и такая линка одна - делайте так. чем проще локатор тем лучше.

Если вышеприведенный способ не подходит, то стоит помнить - при построении локаторов лучше избегать неопределенных ситуации. в данном примере использование непривязанного к элементу шага назад /…/ не критично. Между элементами tr и td не может появиться чегото нового по определению. В других случаях, незначительные изменения верстки могут свалить ваши тесты.

Чтобы сделать ваши xpath более стабильными явно привязывайтесь к элементам.

//input[contains(@id, '35702')]/ancestor::tr//а[text()='View PDF']

В данном случае у tr нет никаких атрибутов. В случае другого элемента стоит их указать.


(Roma Marinsky) #8

В таблице такое не прокатит. Потому, что этот линк тект будет дублироваться