Option de menu sélénium - Python - drop-down valeur

je dois sélectionner un élément dans un menu déroulant.

par exemple, ouvrez ceci:

<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. donc je dois d'abord cliquer dessus. Je fais ceci:

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

(ok, c'est l'ouverture du menu)

  1. et après avoir choisi le bon élément, disons Mango. J'ai essayé autre chose avec inputElementFruits.send_keys(...) mais ça n'a pas marché.
90
demandé sur Ulf Gjerdingen 2011-10-23 20:40:46

6 réponses

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

il suffit de trouver l'élément et ensuite d'énumérer les options, en sélectionnant l'option ou les options 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 lire plus dans:

https://sqa.stackexchange.com/questions/1355/unable-to-select-an-option-using-seleniums-python-webdriver

63
répondu alanning 2017-04-13 12:41:45

sélénium fournit un Select classe pour travailler avec select -> option 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:

162
répondu alecxe 2017-04-13 12:41:46

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 effectuer des méthodes select 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)
9
répondu Vaibhav 2018-03-25 03:51:54

j'ai essayé beaucoup de choses, mais mon déroulant dans un tableau et je n'étais pas en mesure d'effectuer une simple opération de sélection. Seule la solution ci-dessous a fonctionné. Ici, je mets en évidence drop down elem et en appuyant Flèche vers le bas jusqu'à obtenir la valeur désirée -

        #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)
3
répondu Abhinav Bhatnagar 2016-11-24 06:55:43

la meilleure façon d'utiliser selenium.webdriver.support.ui.Select classe pour travailler avec dropdown sélection, mais un certain temps, il ne fonctionne pas comme prévu en raison de la conception de la question ou d'autres problèmes du HTML.

dans ce type de situation, vous pouvez également préférer comme solution alternative en utilisant execute_script() comme ci-dessous: -

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);
0
répondu Saurabh Gaur 2016-08-28 13:52:22
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)

Il sera beau travail

0
répondu Kuladip 2017-04-12 13:08:50