Нажмите на элемент списка по имени, используя javascript с Selenium Python - PullRequest
0 голосов
/ 25 апреля 2020

Я работаю над веб-формой и пытаюсь щелкнуть по указанному li в пределах ul на основе имени элемента списка. Так что в приведенном ниже примере мне нужно будет нажать на опцию с текстом = "Ваш работодатель". Мне удалось сделать это с classi c driver.find_element_by_xpath, но, поскольку производительность является важным фактором для моего проекта, мне нужно было бы выбрать все опции раскрывающегося списка с помощью Javascript. Мне удалось заполнить все поля ввода формы, но я не могу сделать то же самое для выпадающих меню.

div class="ui-selectmenu-menu ui-front ui-selectmenu-open" id="RegisteredOwner-menu-wrap" style="top: 1898px; left: 130px;" xpath="1">
<ul aria-hidden="false" aria-labelledby="RegisteredOwner-button" id="RegisteredOwner-menu" class="ui-menu ui-widget ui-widget-content ui-corner-bottom" role="listbox" tabindex="0" aria-activedescendant="ui-id-109" aria-disabled="false" style="width: 281px;">
    <li class="ui-menu-item" id="ui-id-108" tabindex="-1" role="option">
        Please select
    </li>
    <li class="ui-menu-item ui-state-focus" id="ui-id-109" tabindex="-1" role="option">The Insured</li>
    <li class="ui-menu-item" id="ui-id-114" tabindex="-1" role="option">Finance/Lease Company</li>
    <li class="ui-menu-item" id="ui-id-115" tabindex="-1" role="option">Your Employer</li>
    <li class="ui-menu-item" id="ui-id-116" tabindex="-1" role="option">None of the Above</li>
</ul>
</div>

Я пробовал много вариантов, но безуспешно. Мне удалось открыть раскрывающийся список, но я не могу выбрать конкретную опцию c. Я знаю, что это можно сделать, используя идентификатор опции, но мне нужно было бы сделать это с именем опции / текстом в качестве входных данных.

Я считаю, что нечто подобное должно работать:

def populate_dropdown(driver, xls):
    elem = driver.find_element_by_xpath("//li[@class='ui-menu-item'][contains(text(),'" + str(xls) + "')]")
    driver.execute_script("arguments[0].click();", elem)

Любая помощь будет высоко ценится.

1 Ответ

0 голосов
/ 25 апреля 2020

Сначала вам нужно нажать на поле dropdown , чтобы загрузить все элементы списка. Примечание. В этом случае все значения списка являются динамическими c, эти значения могут зависеть от другого поля.

Затем после использования явного ожидания загрузки необходимого элемента будет загружен. Как только элемент станет видимым, используйте , нажмите , чтобы выбрать значение. Пример: xpath = // li [text () = 'textInput']

Здесь нет необходимости использовать содержимое в xpath, вы можете напрямую go с текстом.

Я также прошел такой сценарий ... Я думаю, это помогло бы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...