我需要从下拉菜单中选择一个元素。

例如:

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

2)之后,我必须选择好的元素,让我们说芒果。

我尝试用inputElementFruits.send_keys(…)来做,但它不起作用。


当前回答

在看了很多类似这篇文章之后,我设法想出了一个解决方案,让我可以在下拉列表中选择一个项目。我尝试了.send_keys,单击()和选择在各种方式没有成功。最后,在单击下拉列表中的项目之前,向下拉列表发送了3次click()命令。

dropMenu = browser.find_element_by_id('cmbDeviceType')
dropMenu.click()
dropMenu.click()
dropMenu.click()

deviceType = browser.find_element_by_id('cmbDeviceType_DDD_L_LBI16T0')
deviceType.click()

绝对不是很漂亮,但是很好用。

希望这能帮助到一些人。这是在Firefox 88.0.1上使用Python3.7.7完成的。

其他回答

下拉菜单WITHOUT <select>

这适用于我每次面对没有<select>标签的下拉菜单

# Finds the dropdown option by its text
driver.find_element_by_xpath("//*[text()='text of the option']")

导入ActionChains模块

from selenium.webdriver.common.action_chains import ActionChains

使用ActionChains点击元素

drp_element = driver.find_element_by_xpath("//*[text()='text of the option']")
action = ActionChains(driver)
action.click(on_element=drp_element).perform()

除非您的单击触发了某种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=browser.find_element(by=By.XPATH,value='path to the dropdown')
 select.send_keys("Put value here to select it")

我用它进行所有的点击和选择,它总是有效的。对于下拉项,只需确保xpath是您想要选择的实际值。

var = WebDriverWait(driver, explicit_wait_seconds).until(
        EC.element_to_be_clickable((By.XPATH, self)))
    # added the click here.
    ActionChains(driver).move_to_element(var).click()
    perform_actions()

actions.perform()
 # Reset was required to clear it. Might be patched now.
actions.reset_actions()
for device in actions.w3c_actions.devices:
    device.clear_actions()

Selenium提供了一个方便的Select类来使用Select ->选项结构:

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

参见:

使用Selenium的Python WebDriver的正确方法是什么?