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>
-
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)
- 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é.
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
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:
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)
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)
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);
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