diff --git a/robobrowser/forms/fields.py b/robobrowser/forms/fields.py index c6ddeb3..e8b3b86 100644 --- a/robobrowser/forms/fields.py +++ b/robobrowser/forms/fields.py @@ -57,6 +57,14 @@ class Submit(Input): pass +class Image(Submit): + def serialize(self): + return { + self.name + '.x': self._parsed.get('value'), + self.name + '.y': self._parsed.get('value') + } + + class FileInput(BaseField): @BaseField.value.setter diff --git a/robobrowser/forms/form.py b/robobrowser/forms/form.py index 00b7222..821387e 100644 --- a/robobrowser/forms/form.py +++ b/robobrowser/forms/form.py @@ -44,6 +44,8 @@ def _parse_field(tag, tags): tag_type = tag.get('type', '').lower() if tag_type == 'submit': return fields.Submit(tag) + if tag_type == 'image': + return fields.Image(tag) if tag_type == 'file': return fields.FileInput(tag) if tag_type == 'radio': diff --git a/tests/test_forms.py b/tests/test_forms.py index 51128a8..ed24bef 100644 --- a/tests/test_forms.py +++ b/tests/test_forms.py @@ -146,6 +146,21 @@ def test_serialize_multi(self): assert_equal(serialized.data['submit1'], 'value1') assert_false('submit2' in serialized.data) + def test_serialize_image_submit(self): + html = ''' +
+ + + +
+ ''' + form = Form(html) + submit = form.submit_fields['image_submit'] + serialized = form.serialize(submit) + assert_false('image_submit' in serialized.data) + assert_true('image_submit.x' in serialized.data) + assert_true('image_submit.y' in serialized.data) + class TestParser(unittest.TestCase): @@ -253,6 +268,16 @@ def test_parse_select_multi(self): assert_equal(len(_fields), 1) assert_true(isinstance(_fields[0], fields.MultiSelect)) + def test_parse_input_image(self): + html = ''' + + ''' + _fields = _parse_fields(BeautifulSoup(html)) + assert_equal(len(_fields), 1) + assert_true(isinstance(_fields[0], fields.Image)) + assert_true(isinstance(_fields[0], fields.Submit)) + + class TestInput(unittest.TestCase):