Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Как правильно реализовать если есть на странице кнопка то клик , а если нет идем дальше!

selenium
webdriver
java
Теги: #<Tag:0x00007f7b69f22628> #<Tag:0x00007f7b69f22358> #<Tag:0x00007f7b69f21fe8>

#1

Добрый день. Подскажите пожалуйста как правильно реализовать. Использую Java+Selenium+Junit
Есть задача:
Есть кнопочка которая двигает контент в право. Так вот, когда мало контента её нет, когда много контента она есть.
Реализовал след. образом, сам метод - очень долго отрабатывает больше минуты ( когда нет той самой кнопки), но работает! Когда есть , логично работает быстро.

public boolean clickContentUnderPlayer() {
    System.out.println(driver.getCurrentUrl());


     try {
         
         if( clickRight.isDisplayed()){
             clickRight.click();
             return true;

         }
     }

     catch (Exception e)  {
            return false;
     }


    return false;
} }

Наврное проблема с ожиданием. Сильно долго ищет элемент на странице.
Подскажите как правильно реализовать или иной способ реализации. Зарание всем спасибо. Не обходите мимо.


(vmaximv) #2

(Alexander Petrovich) #4

В треде, приведённом @vmaximv, в самом конце упомянуты экспектед кондишнс. Копайте в их сторону.


#5

В класее TestBase - protected static int timeDriverImplicityWait = 60; Не я ставил это значение(
Изменил на - 0; - Тест проходи за 6 сек.
При значении - 5 - Тест проходит 12 сек.
Как я понимаю из того что посоветовали више ImplicitlyWait - время поиска элемента на странице за определенное время которое указываешь зарание.
Тест проходит быстро( там где нет этого элемента) и все норм.
Но как это повлиеяет на все тесты буду смотреть.
И правильно ли использовать ImplicitlyWait - 0


#6

Буду копать в эту сторону имхо другого варианта нет. thanks


(Vitold S) #7

Он не долго отрабатывает, а висит в ожидании (висит на таймауте).

Думаю, что Вам нужно просто использовать код:smile:

List<WebEleemnt> items = driver.findElements(By ...  ); 

Данный код в тот же миг вернет управление и Вы сможете проанализировать количество элементов в items и в случае наличия этих элементов(вашей кнопки) на них нажать.

Вообще заканчивайте висеть на таймаутах рано или поздно поймете, что это просто потеря времени.