Выбор варианта из раскрывающегося списка, который открывается при нажатии и наведении указателя мыши - PullRequest
0 голосов
/ 10 июля 2020

Я пытаюсь использовать Selenium и Python, чтобы нажать кнопку раскрывающегося списка (id = "export"), а затем выбрать опцию (id = "downloadCSV"), когда она открывается, но раскрывающийся список исчезает, когда мышь не зависает на нем.

вот html:

<div class="actionsButton actionsDD" id="export">
                <span class="actionsLabel">Download</span>
                <ul class="actionsDDsub">
                    <li><span id="downloadCSV">CSV</span></li>
                </ul>
                <div class="actionsArrow"></div>
</div>

вот код, который я пытаюсь:

export=driver.find_element_by_id('export')
download=driver.find_element_by_id('downloadCSV')
actions=ActionChains(driver)
actions.move_to_element(export)
actions.click(export)
actions.click(download)
actions.perform()

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

Пожалуйста, помогите, как этого добиться. Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 10 июля 2020

Выпадающее меню все еще может быть там, но просто скрыто. Попробуйте нажать f12 на странице, ваши инструменты разработчика должны появиться. Если у вас Chrome, найдите вкладку с надписью «Элементы», чтобы просмотреть вычисленный исходный код веб-страницы. Firefox также имеет встроенные инструменты разработчика. Его параметры должны быть довольно понятными, но здесь я расскажу о Chromes.

Влево вы найдете стрелку в рамке. Щелкните его, чтобы синхронизировать c исходный вид с элементами страницы, чтобы при наведении курсора мыши на страницу отображался код в окне «Элементы». Наведите указатель мыши на меню, чтобы увидеть его код.

Однако меню, скорее всего, не будет выпадать в этом режиме при наведении курсора. Вам нужно будет изучить источник после нажатия на элемент, который вы хотите просмотреть, вы можете динамически изменить его css (или html). Ваши изменения останутся до тех пор, пока вы не обновите sh страницу. Вместо «зависания» селена, просто возьмите нужный элемент, например, так: driver.findElement (By.tagName ("div")). Документацию по Seleniums можно найти здесь: https://www.selenium.dev/documentation/en/webdriver/web_element/

Возьмите значение href тегов duh , если вам просто нужно перейти по ссылке. Но если вам нужно щелкнуть ссылку, попробуйте следующее: driver.findElement (By.linkText ("См. Пример предупреждения")). Click ();

В этом случае вы просто слишком хорошо знаете текст между теги TEXT. Если это не сработает, попробуйте сделать меню видимым с помощью селена, прежде чем нажимать. Чтобы сделать его видимым, просмотрите источник и убедитесь, что в меню нет отображения. Если это так, то сделайте что-то вроде блочного или встроенного, а затем попробуйте еще раз.

Если у вас все еще есть проблемы, попробуйте найти вкладку «Источники» в инструментах разработчика. Вы можете искать теги элементов в javascript, а также есть функция отладки для пошагового выполнения кода, чтобы увидеть, что делает javascript при наведении курсора. Вам просто нужно сделать элемент видимым для селена, прежде чем щелкнуть, то есть если предыдущие решения не работают. Надеюсь, это поможет.

0 голосов
/ 10 июля 2020

Это может вам помочь. Попробуйте снова навести курсор на кнопку, а затем выполните действие щелчка

actions=ActionChains(driver)
actions.move_to_element(WebDriverWait(driver, 10).until(ExpectedCondition.element_to_be_clickable((By.Id, 'export'))))
actions.click(export)
actions.move_to_element(WebDriverWait(driver, 10).until(ExpectedCondition.element_to_be_clickable((By.Id, 'downloadCSV'))))// if you get elemeent not found exception then try to move_to_element to 'export' first and then click on download
actions.click(download)
actions.perform()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...