Ожидаемое условие не выполнено: ожидание видимости всех элементов, расположенных с помощью By.xpath (попытка длилась 30 секунд с интервалом 500 миллисекунд)

Привет!

Прошу помочь разобраться с проблемой.

Падает тест, ошибка: org.openqa.selenium.TimeoutException: ожидаемое условие не выполнено: ожидание видимости всех элементов, расположенных с помощью By.xpath: //h5[text()=‘Elements’] (попытка длилась 30 секунд с интервалом 500 миллисекунд)

Использую Java, Selenium, openJDK, Maven. Сайт, который тестирую (использую для обучения автоматизации тестирования) - https://demoqa.com/

Я хочу, что бы этот сайт открылся в браузере и кликнуть по разделу Elements. Так и происходит - сайт открывается и кликается раздел Elements. После этого тест падает.

Код (вынесен в отдельный класс):

 public void chooseElements(String Elenents) {
        click(By.xpath("//h5[text()='Elements']"));
    }

В самом тесте код такой:

@org.junit.jupiter.api.Test
    public void FirstTest() {
        main.goTo(); /* обращаемся к странице MainPage */
        main.chooseElements("Elements");
       elements.checkPageIsCorrect();
    }

"//h5[contains(text(),'Elements')]"

А для чего вы передаёте переменную, если вы её не используете?

Падает на следующем шаге? Возможно не проходит проверку, которая у вас вызывается в следующей функции. Хорошо бы логи посмотреть

присоединяюсь
Olga_Golubeva
показывайте checkPageIsCorrect которая рушит тест

1 лайк

Не помогло. Ошибка падает именно на elements.checkPageIsCorrect();

С логами не смогла пока совладать, но тест падает на elements.checkPageIsCorrect();
Если удалить строку, то тест проходит. Но происходит только открытие сайта, а по элементу уже нет клика.

код checkPageIsCorrect покажите


/* 8. Is Element Displayed - найден элемент или нет. True - это Ok, False - тест провален */
public void isElementDisplayed(By elementBy) {
waitVisibility(elementBy);
assertTrue(driver.findElement(elementBy).isDisplayed());

По обучалке , я понимаю, этот код относится к " checkPageIsCorrect".
По логике assert делает проверку найден элемент или нет.

isDisplayed() возвращает ошибку, если элемент не найден!

Вот реализация метода isDisplayed

public boolean isDisplayed() {
    Object value = execute(DriverCommand.IS_ELEMENT_DISPLAYED, ImmutableMap.of("id", id))
        .getValue();
    try {
      return (Boolean) value;
    } catch (ClassCastException ex) {
      throw new WebDriverException("Returned value cannot be converted to Boolean: " + value, ex);
    }
  }

Реализуйте isDisplayed через try catch,

перейдите на Selenide и проблема решится сама собой

Как я понимаю, Ольга проходит какое-то обучение и selenide не самое лучшее решение для обучения. Там тоже нужно разбираться)

Я смотрю уроки на ютуб, а там все так гладко показывают) а по факту есть вопросики. Так как я только начинаю вникать _очень долго приходится искать решение и разбираться что и отчего. Когда решение найдено, то кажется все легко :sweat_smile:. А ваш способ ещё не применила-как разберусь, так отпишусь тут в комментарии.

В общем-то суть автотестов понятна, нужно просто написать их :face_with_hand_over_mouth:.

С моими продуктами, которые я тестирую, кажется, лучшее решение Selenium.

Я думаю, что при любом раскладе у меня будут вопросы. Тут нет разницы Selenium или Selenide.

Если так, то соглашусь @Oleksii_Hlovatskyi что переходите сразу на Selenide, это отличный фреймворк, который упрощает написание тестов) на этом форму кстати есть его основатель) Поэтому с вопросами думаю оперативно поможет)

Поверьте, есть разница!!! Особенно если пишете тесты для тестирования в браузере

Да, тестирую приложения в браузере. Так называемые аддоны доя гугл-доков.
Я как-то сразу отбросил идею с Selenide, даже и не пробовала писать.

Раз определилась с фреймворком, значит его и буду мучать. Хотя нужно бы проверить разные варианты))