на странице есть 2 кнопки с одинаковым селектором, надо поочередно их нажимать. Как это сделать ?

selenium
Теги: #<Tag:0x00007fedc4703b40>

(Maksim Serbichenko) #1

Есть вот такой код и .get(0) - выдает ошибку WebElement button = driver.findElement(By.cssSelector(".btn.btn-block.btn-lg.btn-default")).get(0);


(Roma Marinsky) #2

Используй driver.findElements(By.cssSelector(".btn.btn-block.btn-lg.btn-default")).get(0); // get(1)


(Maksim Serbichenko) #3

Спасибо )))


(Roma Marinsky) #4

Установи мой ответ как решение, не забывай )


(Дмитрий Мирошник) #5

Я бы рекомендовал всё-таки разделять эти кнопки. Напиши нормальные селекторы, которые будут уникальны для каждой кнопки и нажимай их в том порядке, в котором тебе нужно. Решение get(X) стабильно работает только в случае, если тебе всё равно, в каком порядке нажимать кнопки и при этом надо нажать их все. Если порядок важен - то стабильность твоих тестов будет зависеть от внутренней реализации findAll, которая вполне может измениться после обновления версии селениума. Более того, если на какой-то итерации будет добавлена 3-я кнопка с таким же локатором (а локатор у тебя такой, что это не исключено) - то какие 2 из 3-х кнопок нажмёт твой тест - будет загадкой.


(Sergey Korol) #6

Не забывайте еще, что если кнопки динамические, то велика вероятность того, что findElements вернет вам список нулевой размерности, что в итоге приведет к неизбежному ArrayIndexOutOfBoundsException на вызов get(N).