'How to select a drop-down menu value with Selenium using Python?
I need to select an element from a drop-down menu.
For example:
<select id="fruits01" class="select" name="fruits">
<option value="0">Choose your fruits:</option>
<option value="1">Banana</option>
<option value="2">Mango</option>
</select>
1) First I have to click on it. I do this:
inputElementFruits = driver.find_element_by_xpath("//select[id='fruits']").click()
2) After that I have to select the good element, lets say Mango.
I tried to do it with inputElementFruits.send_keys(...) but it did not work.
Solution 1:[1]
Selenium provides a convenient Select class to work with select -> option constructs:
from selenium import webdriver
from selenium.webdriver.support.ui import Select
driver = webdriver.Firefox()
driver.get('url')
select = Select(driver.find_element_by_id('fruits01'))
# select by visible text
select.select_by_visible_text('Banana')
# select by value
select.select_by_value('1')
See also:
Solution 2:[2]
I hope this code will help you.
from selenium.webdriver.support.ui import Select
dropdown element with id
ddelement= Select(driver.find_element_by_id('id_of_element'))
dropdown element with xpath
ddelement= Select(driver.find_element_by_xpath('xpath_of_element'))
dropdown element with css selector
ddelement= Select(driver.find_element_by_css_selector('css_selector_of_element'))
Selecting 'Banana' from a dropdown
- Using the index of dropdown
ddelement.select_by_index(1)
- Using the value of dropdown
ddelement.select_by_value('1')
- You can use match the text which is displayed in the drop down.
ddelement.select_by_visible_text('Banana')
Solution 3:[3]
firstly you need to import the Select class and then you need to create the instance of Select class. After creating the instance of Select class, you can perform select methods on that instance to select the options from dropdown list. Here is the code
from selenium.webdriver.support.select import Select
select_fr = Select(driver.find_element_by_id("fruits01"))
select_fr.select_by_index(0)
Solution 4:[4]
As per the HTML provided:
<select id="fruits01" class="select" name="fruits">
<option value="0">Choose your fruits:</option>
<option value="1">Banana</option>
<option value="2">Mango</option>
</select>
To select an <option> element from a html-select menu you have to use the Select Class. Moreover, as you have to interact with the drop-down-menu you have to induce WebDriverWait for the element_to_be_clickable().
To select the <option> with text as Mango from the dropdown you can use you can use either of the following Locator Strategies:
Using ID attribute and
select_by_visible_text()method:from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui import Select select = Select(WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "fruits01")))) select.select_by_visible_text("Mango")Using CSS-SELECTOR and
select_by_value()method:select = Select(WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "select.select[name='fruits']")))) select.select_by_value("2")Using XPATH and
select_by_index()method:select = Select(WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "//select[@class='select' and @name='fruits']")))) select.select_by_index(2)
Solution 5:[5]
I tried a lot many things, but my drop down was inside a table and I was not able to perform a simple select operation. Only the below solution worked. Here I am highlighting drop down elem and pressing down arrow until getting the desired value -
#identify the drop down element
elem = browser.find_element_by_name(objectVal)
for option in elem.find_elements_by_tag_name('option'):
if option.text == value:
break
else:
ARROW_DOWN = u'\ue015'
elem.send_keys(ARROW_DOWN)
Solution 6:[6]
You don't have to click anything. Use find by xpath or whatever you choose and then use send keys
For your example: HTML:
<select id="fruits01" class="select" name="fruits">
<option value="0">Choose your fruits:</option>
<option value="1">Banana</option>
<option value="2">Mango</option>
</select>
Python:
fruit_field = browser.find_element_by_xpath("//input[@name='fruits']")
fruit_field.send_keys("Mango")
That's it.
Solution 7:[7]
You can use a css selector combination a well
driver.find_element_by_css_selector("#fruits01 [value='1']").click()
Change the 1 in the attribute = value css selector to the value corresponding with the desired fruit.
Solution 8:[8]
In this way you can select all the options in any dropdowns.
driver.get("https://www.spectrapremium.com/en/aftermarket/north-america")
print( "The title is : " + driver.title)
inputs = Select(driver.find_element_by_css_selector('#year'))
input1 = len(inputs.options)
for items in range(input1):
inputs.select_by_index(items)
time.sleep(1)
Solution 9:[9]
It works with option value:
from selenium import webdriver
b = webdriver.Firefox()
b.find_element_by_xpath("//select[@class='class_name']/option[@value='option_value']").click()
Solution 10:[10]
I use this for all of my clicks and selecting and it always works. For a dropdown item just make sure the xpath is the actual value you want to select.
var = WebDriverWait(driver, explicit_wait_seconds).until(
EC.element_to_be_clickable((By.XPATH, self)))
# added the click here.
ActionChains(driver).move_to_element(var).click()
perform_actions()
actions.perform()
# Reset was required to clear it. Might be patched now.
actions.reset_actions()
for device in actions.w3c_actions.devices:
device.clear_actions()
Solution 11:[11]
from selenium.webdriver.support.ui import Select
driver = webdriver.Ie(".\\IEDriverServer.exe")
driver.get("https://test.com")
select = Select(driver.find_element_by_xpath("""//input[@name='n_name']"""))
select.select_by_index(2)
It will work fine
Solution 12:[12]
Dropdown WITHOUT <select>
This works for me every time I face a dropdown without <select> tags
# Finds the dropdown option by its text
driver.find_element_by_xpath("//*[text()='text of the option']")
Import ActionChains module
from selenium.webdriver.common.action_chains import ActionChains
Use ActionChains to click on the element
drp_element = driver.find_element_by_xpath("//*[text()='text of the option']")
action = ActionChains(driver)
action.click(on_element=drp_element).perform()
Solution 13:[13]
After going through a lot of posts like this one, I managed to figure out a solution that allowed me to select an item in a dropdown. I tried .send_keys, click(), and Select in various ways with no success. Ended up sending the click() command to the dropdown 3 times before clicking on the item in the dropdown.
dropMenu = browser.find_element_by_id('cmbDeviceType')
dropMenu.click()
dropMenu.click()
dropMenu.click()
deviceType = browser.find_element_by_id('cmbDeviceType_DDD_L_LBI16T0')
deviceType.click()
Definitely not super pretty, but it works.
Hope this helps someone. This was done with Python3.7.7 on Firefox 88.0.1.
Solution 14:[14]
The best way to use selenium.webdriver.support.ui.Select class to work to with dropdown selection but some time it does not work as expected due to designing issue or other issues of the HTML.
In this type of situation you can also prefer as alternate solution using execute_script() as below :-
option_visible_text = "Banana"
select = driver.find_element_by_id("fruits01")
#now use this to select option from dropdown by visible text
driver.execute_script("var select = arguments[0]; for(var i = 0; i < select.options.length; i++){ if(select.options[i].text == arguments[1]){ select.options[i].selected = true; } }", select, option_visible_text);
Solution 15:[15]
dropdown1 = Select(driver.find_element_by_name("fruits"))
dropdown1.select_by_visible_text('banana')
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
