Перейти к содержимому

Фотография

Проблемы с findElements


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 12

#1 Illia_V

Illia_V

    Новый участник

  • Members
  • Pip
  • 12 сообщений
  • ФИО:Илья
  • Город:Киев

Отправлено 16 февраля 2020 - 19:44

Привет. Помогите, пожалуйста, с вопросом.

 

В магазине на странице отображается 60 товаров. С помощью findElements хочу занести все локаторы в список.

Однако при начале работы с этим списком, оказывается что все 60 элементов - это один и тот же елемент - первый.

 

В чем может быть дело? Пробовал менять Xpath, но все равно println показывает что id всех елементов в списке один и тот же.

        open("https://rozetka.com.ua/mobile-phones/c80003/preset=smartfon/");
        List<WebElement> stickersList = findAll("//li[contains(@class,'catalog-grid__cell')]");
        for (int k = 0; k < stickersList.size(); k++) {
            System.out.println(k + ": " + stickersList.get(k));
        }

DOM:  https://take.ms/vCHmK

результат: https://take.ms/E6VRH


  • 0

#2 Freiman

Freiman

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 591 сообщений
  • ФИО:Андрей Адеркин
  • Город:Йошкар-Ола

Отправлено 16 февраля 2020 - 20:06

А что за функция findAll() ?


  • 0

#3 Illia_V

Illia_V

    Новый участник

  • Members
  • Pip
  • 12 сообщений
  • ФИО:Илья
  • Город:Киев

Отправлено 16 февраля 2020 - 20:07

А что за функция findAll() ?

    public List<WebElement> findAll(String locator) {
        return driver.findElements(By.xpath(locator));
    }

  • 0

#4 BabyRoot

BabyRoot

    Специалист

  • Members
  • PipPipPipPipPip
  • 833 сообщений


Отправлено 16 февраля 2020 - 20:41

//li[contains(@class,'catalog-grid__cell')] - локатор не работает. Давайте другой.


  • 0

#5 Illia_V

Illia_V

    Новый участник

  • Members
  • Pip
  • 12 сообщений
  • ФИО:Илья
  • Город:Киев

Отправлено 16 февраля 2020 - 20:50

//li[contains(@class,'catalog-grid__cell')] - локатор не работает. Давайте другой.

//li[@class = 'catalog-grid__cell catalog-grid__cell_type_slim']

или

//div[@class = 'goods-tile__inner']

результат тот же


  • 0

#6 BabyRoot

BabyRoot

    Специалист

  • Members
  • PipPipPipPipPip
  • 833 сообщений


Отправлено 16 февраля 2020 - 21:07

Походу, мы с вами на разных страницах ищем...

Вы же указали эту - https://rozetka.com....reset=smartfon/


  • 0

#7 Illia_V

Illia_V

    Новый участник

  • Members
  • Pip
  • 12 сообщений
  • ФИО:Илья
  • Город:Киев

Отправлено 16 февраля 2020 - 21:15

Походу, мы с вами на разных страницах ищем...

Вы же указали эту - https://rozetka.com....reset=smartfon/

Ну да. Все правильно

https://take.ms/gNCQ0


  • 0

#8 Freiman

Freiman

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 591 сообщений
  • ФИО:Андрей Адеркин
  • Город:Йошкар-Ола

Отправлено 16 февраля 2020 - 21:43

Походу, мы с вами на разных страницах ищем...
Вы же указали эту - https://rozetka.com....reset=smartfon/

У меня тож не работает, явно какие-то разные версии сайта.

Еще попробуйте выводить хотя б gettext, чтобы было понятно, что же там реально находится
  • 1

#9 Illia_V

Illia_V

    Новый участник

  • Members
  • Pip
  • 12 сообщений
  • ФИО:Илья
  • Город:Киев

Отправлено 16 февраля 2020 - 22:36

 

Походу, мы с вами на разных страницах ищем...
Вы же указали эту - https://rozetka.com....reset=smartfon/

У меня тож не работает, явно какие-то разные версии сайта.

Еще попробуйте выводить хотя б gettext, чтобы было понятно, что же там реально находится

 

Супер. В списке действительно хранятся разные значения.

https://take.ms/RNgnP

 

Проблема возникла из-за того, что я дальше делал, а одинаковый id сбил с толку.

Я пытался в найденных элементах найти ещё один элемент.

Сделал это через xpath, который находил первый же попавшийся элемент по всему DOM, а не в конкретном элементе.

 

Как лучше извлекать нужные мне данные из уже найденных элементов?

https://take.ms/5MniF

Или использовать Map чтобы сразу их вместе держать?


  • 0

#10 Freiman

Freiman

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 591 сообщений
  • ФИО:Андрей Адеркин
  • Город:Йошкар-Ола

Отправлено 17 февраля 2020 - 06:18

Как лучше извлекать нужные мне данные из уже найденных элементов?
https://take.ms/5MniF
Или использовать Map чтобы сразу их вместе держать?

А зачем такие сложности? Если надо только этот текст, то можно первым же запросом его выдирать.
  • 0

#11 Illia_V

Illia_V

    Новый участник

  • Members
  • Pip
  • 12 сообщений
  • ФИО:Илья
  • Город:Киев

Отправлено 17 февраля 2020 - 07:54

 

Как лучше извлекать нужные мне данные из уже найденных элементов?
https://take.ms/5MniF
Или использовать Map чтобы сразу их вместе держать?

А зачем такие сложности? Если надо только этот текст, то можно первым же запросом его выдирать.

 

Так в том и дело. Хочу проверить есть ли у найденных элементов один или несколько других встроенных в них элементов.

И вообще. Возможно ли делать поиск xpath в уже найденном webElement? Так чтобы поиск производился только в нем а не по всей странице.

Сама команда finfElement доступна для webElement, но поиск, похоже, идет по всему DOM.


  • 0

#12 Freiman

Freiman

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 591 сообщений
  • ФИО:Андрей Адеркин
  • Город:Йошкар-Ола

Отправлено 17 февраля 2020 - 08:07

Так в том и дело. Хочу проверить есть ли у найденных элементов один или несколько других встроенных в них элементов.
И вообще. Возможно ли делать поиск xpath в уже найденном webElement? Так чтобы поиск производился только в нем а не по всей странице.
Сама команда finfElement доступна для webElement, но поиск, похоже, идет по всему DOM.

Да, можно. Подробности надо погуглить, но насколько я помню, в таком случае xpath должен быть в виде
element.findElements(By.xpath("child/child2"))
т.е. без стартовых слэшей.
Ну или брать не xpath, а стили, например.
  • 1

#13 Illia_V

Illia_V

    Новый участник

  • Members
  • Pip
  • 12 сообщений
  • ФИО:Илья
  • Город:Киев

Отправлено 17 февраля 2020 - 19:03

Вопрос решил. Всем спасибо за помощь.

P.S. Поиск дочернего элемента с помощью xpath записывается через точку ".//xxxx" или "./xxxx"


  • 1


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных