From 3a7c28f1557ce386d91bed2e16ea6658af90d0be Mon Sep 17 00:00:00 2001 From: Artem Bogomyagkov Date: Thu, 19 Apr 2012 18:07:38 +0300 Subject: [PATCH] fixed FormRequest for a form missed values case --- scrapy/http/request/form.py | 4 ++-- scrapy/tests/test_http_request.py | 27 +++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/scrapy/http/request/form.py b/scrapy/http/request/form.py index d2ebf011a..50533ea42 100644 --- a/scrapy/http/request/form.py +++ b/scrapy/http/request/form.py @@ -77,11 +77,11 @@ def _get_inputs(form, formdata, dont_click, clickdata, response): except (ValueError, TypeError): raise ValueError('formdata should be a dict or iterable of tuples') - inputs = [(n, v) for n, v in form.form_values() if n not in formdata] + inputs = [(n, u'' if v is None else v) for n, v in form.fields.items() if n not in formdata] if not dont_click: clickable = _get_clickable(clickdata, form) - if clickable and clickable[0] not in formdata: + if clickable and clickable[0] not in formdata and not clickable[0] is None: inputs.append(clickable) inputs.extend(formdata.iteritems()) diff --git a/scrapy/tests/test_http_request.py b/scrapy/tests/test_http_request.py index 8a590f7eb..2110e73f4 100644 --- a/scrapy/tests/test_http_request.py +++ b/scrapy/tests/test_http_request.py @@ -496,6 +496,33 @@ class FormRequestTest(RequestTest): response = HtmlResponse("http://www.example.com/formname.html", body=respbody) self.assertRaises(IndexError, self.request_class.from_response, response, formname="form3", formnumber=2) + def test_from_response_missed_value(self): + respbody = """ +
+ + + + + +