Могу ли я добавить несуществующее поле в форму с помощью WebTest?

Я тестирую форму с помощью WebTest. Однако некоторые поля создаются динамически с использованием JS, и, следовательно, эти поля не находятся в форме. У меня ошибка при попытке установить одно из следующих полей:

>>> resp.form ['new_field'] = 'значение'
или же
>>> resp.form.set('new_field', 'value')
или же
>>> resp.form.set('new_field', 'value', index=0)
или же 
>>> resp.form ['new_field']. force_value ('value')

*** AssertionError: Поле с именем 'new_field' не найдено

Есть ли способ создать поле?

2 ответа

Решение

Вам нужно добавить новое поле в поля и field_order:

from webtest.forms import Text
def add_dynamic_field(form, name, value):
    """Add an extra text field to a form. More work required to support files"""
    field = Text(form, 'input', None, None, value)
    form.fields[name] = [field]
    form.field_order.append((name, field))

add_dynamic_field(resp.form, 'newfield', 'some value')

Обновлен код @lambacck для обработки файловых полей.

from webtest.forms import Text, File
from webtest import Upload


def add_dynamic_field(form, name, value):
    field_cls = File if isinstance(value, Upload) else Text
    field = field_cls(form, 'input', None, 999, value)
    form.fields[name] = [field]
    form.field_order.append((name, field))
Другие вопросы по тегам