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, \