Как получить код (путь) к выпадающему списку элемента?

Как получить код (путь) к выпадающему списку элемента, чтобы в своих тестах работать с этим выпадающим списком (определять кол-во записей в нём после ввода значения, кликать по определённому по счёту значению) ?)

Через поиск элемента в DevTools не удалось это сделать.

плохо искали, значит
всё, что в бразуере - нарисовано в html

в интернете есть где сайт ваш посмотреть?

1 лайк

Нет, это закрытое веб-приложение.
Проблема в том, что когда я кликаю по элементу и открывается выпадающий список, то после того как я кликаю по этому списку (Ctrl+shirt+C) - в коде страницы не отображается явная строка с кодом этого списка. То есть фокус не установлен на конкретной строчке, как это бывает когда мы ищем элементы.

f12 и на вкладке elements в поле поиска вбейте любое значение из списка и сделайте скрин



Здесь проблема еще в том, что это выпадающий список не со статичными значениями в нём. По умолчанию он пуст, если его вызвать. Значения в выпадающем списке появляются если с клавиатуры в поле ввести какой-то текст. И если в таблице БД есть запись, содержащая этот текст - выпадающий список покажет результаты.

да нет никакой проблемы

введите фамилию, чтоб список появился, и в elements найдите html код, который описывает этот список и его составляющие, и там можно будет написать селектор, сделайте скрин, если нужна помощь

сейчас ваши скрины ничего не показывают

Я разобрался как найти код, описывающий строки выпадающего списка:

Там в каждой записи есть data-test, он уникальный для конкретного сотрудника. Идёт статическая часть li-element- а после неё уникальный идентификатор сотрудника.
Если сделать Xpath по конкретному идентификатору, то всё работает - конкретная запись выбирается в выпадающем списке:

Но мне очень важно чтобы выбиралась не конкретная запись в списке, а именно первая. Так как список динамический, и записи могут быть разными в зависимости от ввода. Мне важно понять как кликнуть именно по первой.

вот у вас есть дропдаун
//div[@role = ‘listbox’]

у него внутри каждый элемент
//li[contains(@data-test, ‘li-element’)]
или
//li[contains(@class, ‘select-input-option’)]

ну и дальше делаете findElements по локатору, и берёте первый из них

Разобрался, благодарю за помощь.
Но видимо пока этот способ не эффективный, так как в нашем приложении на каждой странице практически по несколько таких дропдаунов и все они одинаковые - //div[@role = ‘listbox’] с элементами внутри //li[contains(@data-test, ‘li-element’)] или //li[contains(@class, ‘select-input-option’)]. Верхнего уникального родителя у них тоже нет. Невозможно привязаться к конкретному дропдауну. Плюс ко всему их положение и количество может меняться в зависимости от выставленных настроек пользователя.

и здесь вы весьма пессимистично настроены, вполне можно привязаться к названию модального окна и дальше вглубь искать внутри него списки и выпадашки

Благодарю, мне эта статья очень помогла. Пока не смог разобраться как работать через findElements но смог составить локатор, обращаясь к уникальному родителю. Таким образом создал коллекцию в Selenide и теперь с выпадающим списком можно работать, все требуемые кейсы работают.