Selenium从字典中选择for循环的下拉选项

时间:2012-08-28 17:08:45

标签: python selenium web2py

我有一个包含输入和下拉列表的表单:

[...]
<select>
<option></option>
<option>Test User 1</option>
<option>Test User 2</option>
</select>
[...]

我将值传递给Selenium作为词典:

dict = {'user':'Test User 1', [...]}

我使用for循环来执行此操作:

for key in dict.keys():
    inputElement = driver.find_element_by_name(key)
    inputElement.clear()
    inputElement.send_keys(dict[key])

它适用于所有输入,但使用下拉菜单不起作用。但是当我没有循环的情况下它可以工作。例如:

inputElement = driver.find_element_by_name('user')
inputElement.clear()
inputElement.send_keys(dict['user'])

inputElement = driver.find_element_by_name('user')
inputElement.clear()
inputElement.send_keys('Test User 1')

3 个答案:

答案 0 :(得分:13)

from selenium.webdriver.support.ui import Select

select = Select(driver.find_element_by_id("dropdown_menu"))
select.select_by_visible_text("Test User 1")

答案 1 :(得分:1)

如果clear()是问题...那么请执行以下操作:

from selenium import webdriver
from selenium.webdriver.support.ui import Select
driver = webdriver.Firefox()
dict = {'user': 'Test User 1', 'user': 'Test User 2'}
for key in dict.keys():
    inputElement = driver.find_element_by_name(key)
    if inputElement.tag_name == 'input':
        inputElement.clear()
        inputElement.send_keys(dict[key])
    elif inputElement.tag_name == 'select':
        # now use the suggestion by J.F. Sebastian
        select_obj = Select(inputElement)
        select_obj.select_by_visible_text(dict[key])

这适用于FF,它很可能也适用于Chrome,但尚未对其进行测试。

答案 2 :(得分:0)

如果clear()本身导致问题意味着那么就像这样包含。   if key != 'user' 您不能通过is_not_dropdown()检查,因为您在循环中执行此操作,并且值也在字典中。