用python selenium选择下拉项目

时间:2014-08-12 08:10:52

标签: python-2.7 selenium selenium-webdriver

我一直试图从下拉列表中选择一个项目。我一直在寻找和尝试一切。我试图通过id,xpath和name进行搜索和选择。我完全失去了。我一直看到select_by_value,但我收到了错误' WebElement'对象没有属性' select_by_value'

我试图从中选择的网站代码如下。

<input type="hidden" name="wlw-select_key:{actionForm.dobMonth}OldValue" value="true">
<select name="wlw-select_key:{actionForm.dobMonth}" id="dobMonth" class="dobMonth">   <option value="">Select month</option>
<option value="01">January</option>
<option value="02">February</option>
<option value="03">March</option>
<option value="04">April</option>
<option value="05">May</option>
<option value="06">June</option>
<option value="07">July</option>
<option value="08">August</option>
<option value="09">September</option>
<option value="10">October</option>
<option value="11">November</option>
<option value="12">December</option></select>

我已尝试使用数值和文本值,但两者都没有奏效。我也尝试用id选择然后发送键盘命令。我能做的最好的事情是打开菜单,但它不会改变值。

driver.find_element_by_id('dobMonthSelectBoxItContainer').send_keys("May")

不会出错,但是当我通过xpath或名字找到时,我确实会收到错误。我一直在使用firepath获取xpath,这将是

.//*[@id='genderSelectBoxItText'] 

.//*[@id='5']/a

(我已经进入了几个谷歌搜索的第5页:/大多数我看到使用select命令,但我一直收到这个错误。)

3 个答案:

答案 0 :(得分:1)

处理Select()元素时最好使用<select>类。

from selenium.webdriver.support.select import Select

select = Select(driver.find_element_by_id("dobMonth"))
select.select_by_visible_text("May")

答案 1 :(得分:0)

我确实找到了一个解决方案,但它体积庞大,似乎需要花费更多时间。我创建的解决方案是以下代码。

driver.find_element_by_id('dobMonthSelectBoxItText').click()
time.sleep(1) #requires "import time"
driver.find_element_by_id('dobMonthSelectBoxItText').click()
driver.find_element_by_id('5').click()

这似乎打开了两次盒子,但如果我删除任何一行它不起作用。我觉得这是一种糟糕的编码技术,但这是一个有效的解决方案。如果有人找到,我仍然会欣赏比这更优雅的解决方案。

答案 2 :(得分:0)

这是我使用Selenium

处理下拉列表的方法
def select_dropdown(driver, dropdown_id, option_value):
    dd = driver.find_element_by_id(dropdown_id)
    xpath = ".//option[@value='{}']".format(option_value)
    dd.find_element_by_xpath(xpath).click()

在您的情况下,如果您尝试选择May,就像在示例代码中那样,它将是select_dropdown(driver, 'dobMonth','05')