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>
-
поэтому сначала я должен нажать на него. Я делаю это:
inputElementFruits = driver.find_element_by_xpath("//select["id='fruits']).click()
(ок, он открывает меню)
- и после того, как я должен выбрать хороший элемент, скажем, манго. Я пробую другую вещь с
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)
Он будет работать нормально