Selenium-Python-значение раскрывающегося меню

мне нужно выбрать элемент из раскрывающегося меню.

например, вот так:

<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. поэтому сначала я должен нажать на него. Я делаю это:

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

(ок, он открывает меню)

  1. и после того, как я должен выбрать хороший элемент, скажем, манго. Я пробую другую вещь с inputElementFruits.send_keys(...) но это не сработало.

6 ответов


Если ваш клик не запускает какой-то вызов ajax для заполнения вашего списка, вам на самом деле не нужно выполнять клик.

просто найдите элемент, а затем перечислите параметры, выбрав нужные опции.

вот пример:

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

вы можете прочитать больше в:
https://sqa.stackexchange.com/questions/1355/unable-to-select-an-option-using-seleniums-python-webdriver


селен обеспечивает удобный Select класс на работу с 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')

Читайте также:


сначала вам нужно импортировать Select class, а затем вам нужно создать экземпляр Select class. После создания экземпляра класса Select можно выполнить методы select для этого экземпляра, чтобы выбрать параметры из раскрывающегося списка. Вот код

from selenium.webdriver.support.select import Select

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

Я много чего пробовал, но мое выпадающее меню было внутри таблицы, и я не смог выполнить простую операцию выбора. Сработало только приведенное ниже Решение. Здесь я выделяю выпадающий элемент и нажимаю стрелку вниз до получения желаемого значения -

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

лучший способ использовать selenium.webdriver.support.ui.Select класс для работы с выпадающим выбором, но некоторое время он не работает должным образом из-за проблемы проектирования или других проблем HTML.

в этом типе ситуации вы также можете предпочесть альтернативное решение, используя execute_script() Как ниже :-

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)

Он будет работать нормально