Как при про помощи Selenium+Webdriver+Java нажать на кнопку у которой динамический локатор :?

id and xpath меняются… как бы нажать на кнопочки ?

karabeinikova nt, удели 30 минут своего времени и почитай, посмотри примеры использования XPath.
Обещаю, ты на него потом молиться будешь и в качестве By будешь использовать только его. И все твои проблемы с поиском именно определенного елемента пропадут.

Маленький пример, который должен по идее помочь тебе решить настоящую проблему:

Возьмем скажем настоящий(твой) топик в котором все отвечают.
Вот для начала, с помощью XPath я хочу найти ответ автора AlexS.

Все ответы представляют из себя блок div с class=“row”.

XPath ответов является следующим:

//div[@class='row']

Однако, на данной странице многие ответили и каждый ответ находится в таком же блоке.
Нам нужно добавить параметр, который найдет именно мой (AlexS) ответ.
Для этого мы внутри блока будем искать что то, что отмечает что это AlexS.
В данном случае это ник под аватаром который находится внутри h3 и a.
Значит его XPath будет следующий:

.//h3/a[text()='AlexS']

Теперь нам нужно объединить XPath того блока что мы нашли, и этот, указывающий на автара. То есть указать что нам нужен именно блок, внутри которого есть автор AlexS. То есть мы описываем блок соответсвующе.

Получаем следующее:

//div[@class='row' and .//h3/a[text()='AlexS']]

Таким образом мы найдем ВСЕ блоки в которых автор AlexS.
Если такой блок один, то все ок, но если блоков больше, то мы можем указать к какому именно блоку по счету нужно относиться. Скажем мы хотим первый.
То добавляем в конце [1]
То есть:

//div[@class='row' and .//h3/a[text()='AlexS']][1]

Вот и отыскали мы наш блок.
Скажем внутри блока мы хотим добраться до кнопки ‘Ответить’.
Значит добавляем следующее:

//button[span[text()='Ответить']

И получаем:

//div[@class='row' and .//h3/a[text()='AlexS']][1]//button[span[text()='Ответить']]

Вот и все. Конечно же разумнее разделить это по элементам.

Элемент блока:

var block = driver.FindElement(By.Xpath("//div[@class='row' and .//h3/a[text()='AlexS']][1]"));

ну или

var block = driver.FindElements(By.Xpath("//div[@class='row' and .//h3/a[text()='AlexS']]"))[0];

Кнопка Ответить

var answerBtn = block.FindElement(By.Xpath(".//button[span[text()='Ответить']]"));

И это только малюсенький пример из возможностей XPath.

Почитай немного: http://www.w3schools.com/xpath/default.asp
Вот тут можешь онлайн проверять свои XPath: Free Online XPath Tester / Evaluator - FreeFormatter.com

1 лайк