Пытаюсь решить вот такую задачу, есть таблица -
Мне нужно нажать на кнопку “View PDF”
Но в этом ряду уникальный локатор только у первого столбца в таблице
tbody tr input[value*='35702']
Возможно ли как-то “танцуя от него” нажать на вью пдф?
Пытаюсь решить вот такую задачу, есть таблица -
tbody tr input[value*='35702']
Возможно ли как-то “танцуя от него” нажать на вью пдф?
Попробуйте это Child and Sibling Selectors | CSS-Tricks - CSS-Tricks но я не уверен что поможет.
Не проще ли использовать #xpath ? #css-selectors не такие гибкие.
не знаю, что внутри td, который по середине, но если там нет a можно попробовать:
tbody>tr>td>div>a
или
table[class*='table']>tbody>tr>td+td+td+td+td+td+td+td>div>a
но лучше в данном случае #xpath !
C помощью css нельзя такого сделать. Лучше через #xpath
//*[contains(@id, '35702')]//..//а[.='View PDF']
Или если у вас selenide, то можно
$("[id*='35702']").parent().$(withText("View PDF")).click();
Но всё же как видишь чуть короче с помощью xpath
зачем вообще строить #xpath или #css если у #webdriver есть findElement(By.link_text)
? в питоне я уверен есть тоже аналог.
Если findElement(By.link_text) работает, и такая линка одна - делайте так. чем проще локатор тем лучше.
Если вышеприведенный способ не подходит, то стоит помнить - при построении локаторов лучше избегать неопределенных ситуации. в данном примере использование непривязанного к элементу шага назад /…/ не критично. Между элементами tr и td не может появиться чегото нового по определению. В других случаях, незначительные изменения верстки могут свалить ваши тесты.
Чтобы сделать ваши xpath более стабильными явно привязывайтесь к элементам.
//input[contains(@id, '35702')]/ancestor::tr//а[text()='View PDF']
В данном случае у tr нет никаких атрибутов. В случае другого элемента стоит их указать.
В таблице такое не прокатит. Потому, что этот линк тект будет дублироваться