Динамические выпадающие списки Selenium webdriver Python

#python #selenium #selenium-webdriver

Вопрос:

Недавно начал работать с selenium на python, и пока единственным элементом, с которым у меня возникают проблемы, являются динамические выпадающие списки. Например, на веб-странице в разделах «Темы», «Штат» и «Город«. Как обрабатывать эти элементы, которые не видны в DOM. Может, кто-нибудь может показать мне, как они будут решать упомянутый выше пример.

Для subjects он завершается ошибкой в этой строке:

класс SwitchToFrame():

 def test1(self):
    baseUrl = "https://demoqa.com/automation-practice-form"
    driver = webdriver.Chrome()
    driver.get(baseUrl)

    wait = WebDriverWait(wait = WebDriverWait(driver, timeout=10, poll_frequency=1)
    element = wait.until(expected_conditions.element_to_be_clickable((By.XPATH, "//div[@id='subjectsContainer']/div")))
    element.send_keys("English")
 

Ответ №1:

Здесь я перешел к первому варианту в теме после ввода английского. Также, если вы проверите driver.page_source, вы действительно сможете увидеть элементы внутри. Он исчезает после обработки входного тега.

 wait=WebDriverWait(driver, 10)
driver.get("https://demoqa.com/automation-practice-form")
element = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#subjectsInput")))
element.send_keys("English")
print(driver.page_source)
elem=wait.until(EC.element_to_be_clickable((By.ID, "react-select-2-option-0")))
driver.execute_script("arguments[0].click()", elem)
 

Импорт

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

Комментарии:

1. Код работает, но в исходном коде я вижу только react-select-3-input. Любые советы по поиску подобных элементов?

2. Он появляется, когда фокусируется на входных тегах. Итак, сначала вам нужно щелкнуть входной тег.