Giffen
Giffen

Reputation: 13

Dropdown option not getting selected using Selenium Python

I am trying to select a dropdown option in the form using Selenium webdriver in Python. The XPATH is correct, I also verified it is going to the right dropdown option but in the end it is not selecting it.

I have tried similar code for another website that has a dropdown. But it's not working for this particular website.

Can someone please help out with this?

from selenium import webdriver

driver = webdriver.Chrome("C:\\Users\\xxx\\Downloads\\chromedriver_win32\\chromedriver.exe")

driver.get("https://www.cersai.org.in/CERSAI/dbtrsrch.prg")

elem = driver.find_element_by_xpath("//select[@id='borrowerType']")
all_options = elem.find_elements_by_tag_name("option")

for option in all_options:
    if option.get_attribute("value") == "IND":
        option.click()
        break

Upvotes: 1

Views: 581

Answers (2)

cruisepandey
cruisepandey

Reputation: 29372

It's strange that Select class did not work. It needs a JavaScript call.

driver = webdriver.Chrome(driver_path)
driver.maximize_window()
driver.implicitly_wait(50)
driver.get("https://www.cersai.org.in/CERSAI/dbtrsrch.prg")
driver.execute_script("return document.getElementById('borrowerType').selectedIndex = '2'")

Upvotes: 0

Prophet
Prophet

Reputation: 33361

You should add a wait before accessing the dropdown element to make it loaded.
Also, this is a Select element, you can treat it in a special way as below:

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

driver = webdriver.Chrome("C:\\Users\\xxx\\Downloads\\chromedriver_win32\\chromedriver.exe")

wait = WebDriverWait(driver, 20)

driver.get("https://www.cersai.org.in/CERSAI/dbtrsrch.prg")

wait.until(EC.visibility_of_element_located((By.XPATH, "//select[@id='borrowerType']")))

select = Select(driver.find_element_by_xpath("//select[@id='borrowerType']"))
# select by visible text
select.select_by_value('IND')

Upvotes: 1

Related Questions