使用for循环从字典中选择下拉选项的Selenium方法

7

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

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

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

我将值作为字典传递给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个回答

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
如果 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])

这在火狐浏览器中可以运行,很可能在谷歌浏览器中也可以,但我还没有测试过。


driver.implicit_wait()和/或ui.WebDriverWait可能比time.sleep()更可取。 - jfs
它没有起作用... clear() 方法导致了这个问题!有没有办法做类似于这样的事情 if is_not_dropdown() then input.clear() - Elteroooo

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

这是一个类,我想让它适用于所有情况。 - Elteroooo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接