From 5b0df465e77ffe8be1d04c264449b8e4fada398d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Gra=C3=B1a?= Date: Sun, 15 Apr 2012 00:47:30 -0300 Subject: [PATCH] SELECT matched as form inputs but hasnot type attribute. #111 --- scrapy/http/request/form.py | 2 +- scrapy/tests/test_http_request.py | 25 ++++++++++++++++++------- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/scrapy/http/request/form.py b/scrapy/http/request/form.py index 082d63bbb..d2ebf011a 100644 --- a/scrapy/http/request/form.py +++ b/scrapy/http/request/form.py @@ -93,7 +93,7 @@ def _get_clickable(clickdata, form): if the latter is given. If not, it returns the first clickable element found """ - clickables = [el for el in form.inputs if el.type == 'submit'] + clickables = [el for el in form.xpath('.//input[@type="submit"]')] if not clickables: return diff --git a/scrapy/tests/test_http_request.py b/scrapy/tests/test_http_request.py index f3ce64af6..8a590f7eb 100644 --- a/scrapy/tests/test_http_request.py +++ b/scrapy/tests/test_http_request.py @@ -338,27 +338,38 @@ class FormRequestTest(RequestTest): urlargs = cgi.parse_qs(urlparse(r1.url).query) self.assertTrue(urlargs[u'price in \u00a3'.encode('utf-8')]) + def test_from_response_with_select(self): + body = u""" +
+ + +
+ """ + res = HtmlResponse("http://example.com", body=body, encoding='utf-8') + req = self.request_class.from_response(res) + urlargs = cgi.parse_qs(urlparse(req.url).query) + self.assertEqual(urlargs['inputname'], ['inputvalue']) + def test_from_response_multiple_forms_clickdata(self): body = u"""
- +
- +
""" res = HtmlResponse("http://example.com", body=body, encoding='utf-8') - req = self.request_class.from_response(res, \ - formname='form2', \ - clickdata={'name': 'clickable'}) + req = self.request_class.from_response(res, formname='form2', \ + clickdata={'name': 'clickable'}) urlargs = cgi.parse_qs(urlparse(req.url).query) - self.assertEqual(urlargs['clickable'], ['clicked']) + self.assertEqual(urlargs['clickable'], ['clicked2']) self.assertEqual(urlargs['field2'], ['value2']) self.assertFalse('field1' in urlargs, urlargs) - def test_from_response_multiple_forms_clickdata(self): + def test_from_response_override_clickable(self): body = u'
' res = HtmlResponse("http://example.com", body=body, encoding='utf-8') req = self.request_class.from_response(res, \