it-swarm.com.de

Selenium - Python - Dropdown-Menüoptionswert

Ich muss ein Element aus einem Dropdown-Menü auswählen.

Öffnen Sie beispielsweise Folgendes: 

<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. Also muss ich zuerst darauf klicken. Ich mache das: 

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

(ok, es öffnet das Menü)

  1. Und nachdem ich das gute Element ausgewählt habe, sagen wir Mango. Ich probiere etwas anderes mit inputElementFruits.send_keys(...), aber es hat nicht funktioniert.
105
Adam Bovien

Wenn Ihr Klick keine Art von Ajax-Anruf auslöst, um Ihre Liste aufzufüllen, müssen Sie den Klick nicht ausführen.

Suchen Sie einfach das Element und listen Sie die Optionen auf. Wählen Sie dann die gewünschten Optionen aus.

Hier ist ein Beispiel:

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

Sie können mehr lesen in: 
https://sqa.stackexchange.com/questions/1355/unable-to-select-an-option-using-seleniums-python-webdriver

76
alanning

Selen bietet eine praktische Select-Klasse , um mit select -> option-Konstrukten zu arbeiten:

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

Siehe auch:

197
alecxe

zunächst müssen Sie die Select-Klasse importieren und anschließend die Instanz der Select-Klasse erstellen .. Nach dem Erstellen der Instanz der Select-Klasse können Sie Auswahlmethoden für diese Instanz ausführen, um die Optionen aus der Dropdown-Liste auszuwählen. Hier ist der Code

from Selenium.webdriver.support.select import Select

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

Ich habe viele Dinge ausprobiert, aber mein Dropdown befand sich in einem Tisch und ich konnte keine einfache Auswahloperation ausführen. Nur die untenstehende Lösung funktionierte. Hier hebe ich das Dropdown-Element hervor und drücke den Pfeil nach unten, bis der gewünschte Wert erreicht ist. 

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

Es wird gut funktionieren

1
Kuladip

Sie können eine CSS-Auswahlkombination verwenden

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

Ändern Sie die 1 im CSS-Selektor attribute = value in den Wert, der der gewünschten Frucht entspricht.

1
QHarr

Es funktioniert mit Optionswert:

from Selenium import webdriver
b = webdriver.Firefox()
b.find_element_by_xpath("//select[@class='class_name']/option[@value='option_value']").click()
1
Jackssn

Die beste Methode, Selenium.webdriver.support.ui.Select-Klasse zu verwenden, um mit der Dropdown-Auswahl zu arbeiten, funktioniert jedoch aufgrund von Designproblemen oder anderen HTML-Problemen nicht wie erwartet.

In dieser Situation können Sie als Alternative auch execute_script() wie folgt vorziehen: -

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

Sie müssen nichts anklicken. Verwenden Sie find durch xpath oder was auch immer Sie wählen und verwenden Sie dann die Send-Tasten

Für Ihr Beispiel: 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")

Das ist es.

0
Shane Cheek