Выберите опцию выпадающего меню, используя Selenium в Python - PullRequest
0 голосов
/ 29 апреля 2020

Я пытаюсь выбрать параметр в раскрывающемся меню с помощью Selenium, но я не могу понять, как обработать это исключение Тайм-аута

Это html страницы:

<select name="ctl00$ContentPlaceHolder1$ddUnidade" onchange="javascript:setTimeout(&#39;__doPostBack(\&#39;ctl00$ContentPlaceHolder1$ddUnidade\&#39;,\&#39;\&#39;)&#39;, 0)" id="ctl00_ContentPlaceHolder1_ddUnidade" class="form-control" style="width:100%;">
        <option selected="selected" value="">-- SELECIONE --</option>
        <option value="1">MATRIZ</option>
        <option value="2">FILIAL</option>

    </select>

Сначала я попробовал этот код:

select = Select(browser.find_element_by_id('ctl00_ContentPlaceHolder1_ddUnidade'))
select.select_by_visible_text('MATRIZ')

Затем у меня была эта ошибка: ElementNotInteractableException: Сообщение: Элемент не может быть прокручен в представлении

Я гуглил и обнаружил решение WebDriverWait. Итак, я попробовал этот код:

select = Select(browser.find_element_by_id('ctl00_ContentPlaceHolder1_ddUnidade'))
WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.XPATH, "//select[@id='ctl00_ContentPlaceHolder1_ddUnidade']//options[contains(.,'MATRIZ')]")))
select.select_by_visible_text('MATRIZ')

Тогда у меня было это: TimeoutException: Сообщение:

Я снова погуглил, и было другое решение с E C .presence_of_element_located, но это не тоже не работает. У меня было то же сообщение TimeouException. Кто-нибудь знает, как это решить?

1 Ответ

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

Попробуйте решение ниже:

element= WebDriverWait(driver, 15).until(EC.element_to_be_clickable((By.ID, "ctl00_ContentPlaceHolder1_ddUnidade")))
actionChains = ActionChains(driver)
actionChains.move_to_element(element).perform()
select = Select(element)
select.select_by_visible_text('MATRIZ')

Примечание: , пожалуйста, добавьте ниже импорта в ваше решение

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.action_chains import ActionChains

или

element= WebDriverWait(driver, 15).until(EC.element_to_be_clickable((By.ID, "ctl00_ContentPlaceHolder1_ddUnidade")))
driver.execute_script("arguments[0].scrollIntoView()", element)
select = Select(element)
select.select_by_visible_text('MATRIZ')

Обновленное решение:

element= WebDriverWait(driver, 15).until(EC.element_to_be_clickable((By.ID, "ctl00_ContentPlaceHolder1_ddUnidade")))
actionChains = ActionChains(driver)
actionChains.move_to_element(element).perform()
select = Select(element)
WebDriverWait(driver, 30).until(EC.element_to_be_clickable((By.XPATH, "//select[@id='ctl00_ContentPlaceHolder1_ddUnidade']//options[contains(.,'MATRIZ')]")))
select.select_by_visible_text('MATRIZ')
...