我有一个包含输入和下拉列表的表单:
[...]
<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')
答案 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()检查,因为您在循环中执行此操作,并且值也在字典中。