Использование Python Mechanize, например «Tamper Data»
Вопрос
Я пишу сценарий веб-тестирования с использованием Python (2.6) и механизации (0.1.11).Страница, с которой я работаю, имеет HTML-форму с таким полем выбора:
<select name="field1" size="1">
<option value="A" selected>A</option>
<option value="B">B</option>
<option value="C">C</option>
<option value="D">D</option>
</select>
В механизации, если я попробую что-то вроде этого:
browser.form['field1'] = ['E']
Затем я получаю сообщение об ошибке: ClientForm.ItemNotFoundError: insufficient items with name 'E'
Я могу сделать это вручную с помощью расширения Firefox «Tamper Data».Есть ли способ сделать это с помощью Python и механизировать?Могу ли я каким-то образом убедить механизировать, что форма действительно имеет то значение, которое я хочу отправить?
Решение
Покопавшись в внутренностях ClientForm, кажется, что вы можете обманом заставить его добавить еще один элемент.
Для поля выбора, похоже, работает что-то вроде этого:
xitem = ClientForm.Item(browser.form.find_control(name="field1"),
{'contents':'E', 'value':'E', 'label':'E'})
Аналогично, для элемента управления радиокнопкой
xitem = ClientForm.Item(browser.form.find_control(name="field2"),
{'type':'radio', 'name':'field2', 'value':'X'})
Обратите внимание, что инициализатор элемента автоматически обновит список элементов для указанного элемента управления, поэтому вам нужно только правильно создать элемент, чтобы он появился.