318 votes

Comment sélectionner la valeur d'un menu déroulant avec Selenium en utilisant Python ?

Je dois sélectionner un élément dans un liste déroulante menu.

Par exemple :

<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) Je dois d'abord cliquer dessus. Je fais cela :

inputElementFruits = driver.find_element_by_xpath("//select[id='fruits']").click()

2) Ensuite, je dois sélectionner le bon élément, disons Mango .

J'ai essayé de le faire avec inputElementFruits.send_keys(...) mais cela n'a pas fonctionné.

549voto

alecxe Points 50783

Le sélénium fournit un Select classe pour travailler avec select -> option les constructions :

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')

Voir aussi :

176voto

alanning Points 1698

À moins que votre clic ne déclenche une sorte d'appel ajax pour remplir votre liste, vous n'avez pas besoin d'exécuter le clic.

Il suffit de trouver l'élément, puis d'énumérer les options, en sélectionnant celle(s) que vous voulez.

Voici un exemple :

from selenium import webdriver
b = webdriver.Firefox()
b.find_element_by_xpath("//select[@name='element_name']/option[text()='option_text']").click()

Vous pouvez en savoir plus dans :
https://sqa.stackexchange.com/questions/1355/unable-to-select-an-option-using-seleniums-python-webdriver

49voto

Abus Points 622

J'espère que ce code vous aidera.

from selenium.webdriver.support.ui import Select

élément de liste déroulante avec id

ddelement= Select(driver.find_element_by_id('id_of_element'))

élément de liste déroulante avec xpath

ddelement= Select(driver.find_element_by_xpath('xpath_of_element'))

élément de liste déroulante avec sélecteur css

ddelement= Select(driver.find_element_by_css_selector('css_selector_of_element'))

Sélection de "Banana" dans une liste déroulante

  1. Utilisation de l'index de la liste déroulante

ddelement.select_by_index(1)

  1. Utilisation de la valeur de la liste déroulante

ddelement.select_by_value('1')

  1. Vous pouvez faire correspondre le texte qui s'affiche dans la liste déroulante.

ddelement.select_by_visible_text('Banana')

32voto

Vaibhav Points 2268

Tout d'abord, vous devez importer la classe Select et ensuite vous devez créer l'instance de la classe Select. Après avoir créé l'instance de la classe Select, vous pouvez exécuter des méthodes de sélection sur cette instance pour sélectionner les options de la liste déroulante. Voici le code

from selenium.webdriver.support.select import Select

select_fr = Select(driver.find_element_by_id("fruits01"))
select_fr.select_by_index(0)

17voto

New contributor Points 31198

Selon le HTML fourni :

<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>

Pour sélectionner un <option> d'un élément html-select vous devez utiliser le menu Sélectionnez Classe . De plus, comme vous devez interagir avec le menu déroulant vous devez induire WebDriverWait pour le element_to_be_clickable() .

Pour sélectionner le <option> avec le texte comme Mangue de la menu déroulant vous pouvez utiliser l'un ou l'autre des éléments suivants Stratégies de localisation :

  • Utilisation de ID et select_by_visible_text() méthode :

    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")
  • Utilisation de CSS-SELECTOR y select_by_value() méthode :

    select = Select(WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "select.select[name='fruits']"))))
    select.select_by_value("2")
  • Utilisation de XPATH y select_by_index() méthode :

    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)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X