7

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

[...]
<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')
4

3 回答 3

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")
于 2012-08-28T17:25:15.580 回答
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,但尚未测试。

于 2012-08-28T17:19:05.770 回答
0

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

于 2012-08-29T11:45:12.897 回答