我需要从下拉菜单中选择一个元素。
例如:
<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(…)来做,但它不起作用。
使用selenium.webdriver.support.ui.的最佳方式是使用下拉选择选择要工作的类,但有时由于设计问题或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
带有id的下拉元素
ddelement= Select(driver.find_element_by_id('id_of_element'))
使用xpath的下拉元素
ddelement= Select(driver.find_element_by_xpath('xpath_of_element'))
下拉元素与CSS选择器
ddelement= Select(driver.find_element_by_css_selector('css_selector_of_element'))
从下拉菜单中选择“Banana”
使用下拉索引
ddelement.select_by_index (1)
使用下拉列表的值
ddelement.select_by_value (' 1 ')
您可以使用匹配下拉菜单中显示的文本。
ddelement.select_by_visible_text(香蕉)
根据提供的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>
要从html-select菜单中选择<option>元素,必须使用select类。此外,当你必须与下拉菜单交互时,你必须为element_to_be_clickable()诱导WebDriverWait。
要从下拉菜单中选择<选项>,文本为Mango,你可以使用以下定位器策略之一:
Using ID attribute and select_by_visible_text() method:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import Select
select = Select(WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "fruits01"))))
select.select_by_visible_text("Mango")
Using CSS-SELECTOR and select_by_value() method:
select = Select(WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "select.select[name='fruits']"))))
select.select_by_value("2")
Using XPATH and select_by_index() method:
select = Select(WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "//select[@class='select' and @name='fruits']"))))
select.select_by_index(2)
下拉菜单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()