Получить содержимое выпадающего списка (строки с текстом)

Здравствуйте!

Проблема заключается в получении содержимого выпадающего списка (нужно получить список строк с текстом). В списке 160 значений, на странице отображается 16, остальные подгружаются по скролу или стрелке вниз.

Так выглядит код на странице:

<div class="css-1r0zrug e1uu17r80" style="height: 35px; transform: translateY(41px);">
    <div id="flf9f0dr9aen-2" role="option" aria-selected="false" class="css-1y1zek6 e1x0dvi10">
         Toyota (122202)
    </div>
</div>
Скрин HTML кода элемента

Снимок экрана 2022-10-18 183604

Проблема заключается ещё и в том, что у каждой строки в списке одинаковый аттрибут div class. Div id для разных строк отличается индексом. Но буквенная часть аттбрибута меняется с каждой загрузкой страницы. Поэтому xpath для этих строк для меня сложная задачка.

Я попыталась получить текст хотя бы первой строки из списка и у меня это получилось.

Я не могу придумать, как получить текст из подгружаемых строк без тупого скроллинга ))

Подгружаются запросом или они уже все пришли, и фронт их отрисовывает по частям?

И можете несколько элементов списка с атрибутами скинуть?

Подгужаются запросом, как я поняла. Сайт https://auto.drom.ru/, выпадающий список Марка.

Несколько элементов списка

Ага, пришли сразу и просто динамически подгружаются по примерно 20 единиц, так по поводу x-path можно использовать вот такой
$("[id^=flf9f0dr9]") - он будет брать все локаторы по id начинающиеся с этой подстроки
А без скроллинга пожалуй что и никак не получится.

А если обновить страницу, то буквенная часть id поменяется, поэтому так не найти.
Думаю, можно попробавать сделать через цикл нажатия кнопки ARROW_DOWN и xpath вида:
/html/body/div[2]/div[5]/div[1]/div[1]/div[3]/form/div/div[1]/div[1]/div/div[2]/div/div[16]/div
и из каждого элемента брать текст. Но мне кажется, что это не самое изящное решение))

Хм, действительно, просмотрел.
Так, можно взять нужный нам дропдаун через data-ftid="sales__filter_fid" ,это видимо тестовые id на этом сайте, и от него, как от родительского элемента забрать дочерние нужные нам элементы, ну а дальше да, цикл сбор элементов, сбор текста.

Я бы рекомендовал для этого написать API тест, использовать UI для такого теста очевидно неоптимально с точки зрения времени прохождения такого теста.

1 лайк

Почему бы не написать цикл, который будет передавать в id значение, где цифровая часть будет каждый раз увеличиваться на единицу? Полученное значение передаете в локатор, и берете у каждого элемента “outerText”. Далее list.append(element) и получайте ваш список.