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>
Also muss ich zuerst darauf klicken. Ich mache das:
inputElementFruits = driver.find_element_by_xpath("//select["id='fruits']).click()
(ok, es öffnet das Menü)
inputElementFruits.send_keys(...)
, aber es hat nicht funktioniert.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
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:
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)
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)
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
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.
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()
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);
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.