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 に答える