Selenium – Python – valor de opción de menú desplegable

Necesito seleccionar un elemento de un menú desplegable.

Por ejemplo, abre esto:

 Choose your fruits: Banana Mango  
  1. Así que primero tengo que hacer clic en él. Hago esto:

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

(ok, esta abriendo el menu)

  1. Y después de seleccionar el elemento bueno, digamos Mango. Intento algo diferente con inputElementFruits.send_keys(...) pero no funcionó.

A menos que su clic esté activando algún tipo de llamada ajax para completar su lista, en realidad no necesita ejecutar el clic.

Simplemente busque el elemento y luego enumere las opciones, seleccionando las opciones que desee.

Aquí hay un ejemplo:

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

Puedes leer más en:
https://sqa.stackexchange.com/questions/1355/unable-to-select-an-option-using-seleniums-python-webdriver

Selenium proporciona una clase de Select conveniente para trabajar con las construcciones de select -> option :

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

Ver también:

  • ¿Cuál es la forma correcta de seleccionar un Python WebDriver de Selenium?

en primer lugar, debe importar la clase Select y luego debe crear la instancia de la clase Select. Después de crear la instancia de la clase Select, puede realizar métodos de selección en esa instancia para seleccionar las opciones de la lista desplegable. Aquí está el código

 from selenium.webdriver.support.select import Select select_fr = Select(driver.find_element_by_id("fruits01")) select_fr.select_by_index(0) 

Intenté muchas cosas, pero mi menú desplegable estaba dentro de una mesa y no pude realizar una simple operación de selección. Sólo la solución de abajo funcionó. Aquí estoy resaltando el elemento desplegable y presionando la flecha hacia abajo hasta obtener el valor deseado –

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

Funcionará bien

Puede utilizar una combinación de selector css un pozo

 driver.find_element_by_css_selector("#fruits01 [value='1']").click() 

Cambie el 1 en el selector de atributo = valor css al valor correspondiente con la fruta deseada.

La mejor manera de usar selenium.webdriver.support.ui.Select clase para trabajar con la selección desplegable, pero en algún momento no funciona como se esperaba debido a un problema de diseño u otros problemas del HTML.

En este tipo de situación, también puede preferir una solución alternativa utilizando execute_script() como se muestra a continuación:

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

No tienes que hacer clic en nada. Use find por xpath o lo que elija y luego use las teclas enviar

Para su ejemplo: HTML:

  

Pitón:

 fruit_field = browser.find_element_by_xpath("//input[@name='fruits']") fruit_field.send_keys("Mango") 

Eso es.

  1. Elemento de lista

clase pública ListBoxMultiple {

 public static void main(String[] args) throws InterruptedException { // TODO Auto-generated method stub System.setProperty("webdriver.chrome.driver", "./drivers/chromedriver.exe"); WebDriver driver=new ChromeDriver(); driver.get("file:///C:/Users/Amitabh/Desktop/hotel2.html");//open the website driver.manage().window().maximize(); WebElement hotel = driver.findElement(By.id("maarya"));//get the element Select sel=new Select(hotel);//for handling list box //isMultiple if(sel.isMultiple()){ System.out.println("it is multi select list"); } else{ System.out.println("it is single select list"); } //select option sel.selectByIndex(1);// you can select by index values sel.selectByValue("p");//you can select by value sel.selectByVisibleText("Fish");// you can also select by visible text of the options //deselect option but this is possible only in case of multiple lists Thread.sleep(1000); sel.deselectByIndex(1); sel.deselectAll(); //getOptions List options = sel.getOptions(); int count=options.size(); System.out.println("Total options: "+count); for(WebElement opt:options){ // getting text of every elements String text=opt.getText(); System.out.println(text); } //select all options for(int i=0;i 

}