Selenium – Python – 下拉菜单选项值
我需要从下拉菜单中select一个元素。
例如,打开这个:
<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()
(好吧,它打开菜单)
- 我必须select好的元素后,让我们说芒果。 我尝试
inputElementFruits.send_keys(...)
不同的事情,但它没有奏效。
除非你的点击是发射某种Ajax调用来填充你的列表,你实际上不需要执行点击。
只要find元素,然后枚举选项,select你想要的选项。
这里是一个例子:
from selenium import webdriver b = webdriver.Firefox() b.find_element_by_xpath("//select[@name='element_name']/option[text()='option_text']").click()
Selenium提供了一个方便的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使用Selenium的Python WebDriver的正确方法是什么?
我尝试了很多东西,但是我的下拉是放在桌子里面的,我不能执行简单的select操作。 只有下面的解决scheme工作。 在这里,我强调下拉元素,并按下箭头,直到获得所需的值 –
#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
类来处理下拉select的最好方法,但是由于devise问题或其他HTML问题,有时候它不能按预期工作。
在这种情况下,您也可以select使用execute_script()
作为备用解决scheme,如下所示:
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)
它会正常工作