From 44148377d6fe33e5f948a0cea4a406a38b449bca Mon Sep 17 00:00:00 2001 From: Hayden King <81236+haydenk@users.noreply.github.com> Date: Fri, 4 Oct 2019 15:35:11 -0500 Subject: [PATCH] add new field Image make sure to use the new field when appropriate add tests for new field --- robobrowser/forms/fields.py | 8 ++++++++ robobrowser/forms/form.py | 2 ++ tests/test_forms.py | 25 +++++++++++++++++++++++++ 3 files changed, 35 insertions(+) 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):