我正在使用 django-webtest 来自动化 Django 应用程序的功能测试。我的 ModelForms 之一有多个提交按钮。使用 django-crispy-forms 的模板如下所示:
<form action="" method="post">
{% csrf_token %}
<p>
{{ person_form|crispy }}
<br><br>
{{ admin_form|crispy }}
</p>
<button id="SaveButton" type="submit" name="save_data" class="btn btn-lg btn-primary">Save</button>
<button id="VerifyButton" type="submit" name="verify_data" class="btn btn-lg btn-primary">Verify</button>
</form>
当我通过单击“保存”按钮从网页手动提交表单时,传递到相应视图方法的 request.POST 包含我用来决定在代码中做什么的“save_data”标签。
但是,当我创建一个 django-webtest 测试用例来做同样的事情时,'save_data' 标签不存在,即使我在 form.submit() 中指定它如下:
def test_schools_app_access_school_admin_record(self):
school_index = self.app.get(reverse('schools:school_index'),
user=self.school_admin)
assert self.school_name in school_index
school_page = school_index.click(self.school_name)
assert 'View School Administrator' in school_page
school_admin_page = school_page.click('View School Administrator')
person_form = school_admin_page.forms[1]
assert person_form['person-name'].value == self.school_admin_name
# TODO: Figure out how to pass name='save_data' while submitting
person_form['person-email'] = self.school_admin_email
response = person_form.submit(name='save_data', value='save')
# Verify that the field has been updated in the database
person = Person.objects.get(name=self.school_admin_name)
assert self.school_admin_email in person.email
如何让 django-webtest 在 request.POST 中包含提交按钮的名称?
此外,由于我在同一页面上有多个表单,我目前正在使用 response.forms[1] 来选择感兴趣的表单。但我想改用表单 id。我在 Django 文档中找不到如何将表单 ID(不是字段 ID)分配给 ModelForm。有人可以帮我解决这个问题吗?
我正在使用 Django 1.7、django-webtest 1.7.8、WebTest 2.0.18 和 django-crispy-forms 1.4.0。