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