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

Elt*_*ooo 7 python selenium web2py

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

[...]
<select>
<option></option>
<option>Test User 1</option>
<option>Test User 2</option>
</select>
[...]
Run Code Online (Sandbox Code Playgroud)

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

dict = {'user':'Test User 1', [...]}
Run Code Online (Sandbox Code Playgroud)

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

for key in dict.keys():
    inputElement = driver.find_element_by_name(key)
    inputElement.clear()
    inputElement.send_keys(dict[key])
Run Code Online (Sandbox Code Playgroud)

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

inputElement = driver.find_element_by_name('user')
inputElement.clear()
inputElement.send_keys(dict['user'])
Run Code Online (Sandbox Code Playgroud)

要么

inputElement = driver.find_element_by_name('user')
inputElement.clear()
inputElement.send_keys('Test User 1')
Run Code Online (Sandbox Code Playgroud)

jfs*_*jfs 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")
Run Code Online (Sandbox Code Playgroud)


Igo*_*rko 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])
Run Code Online (Sandbox Code Playgroud)

这适用于 FF,并且很可能也适用于 Chrome,但尚未测试。