From d80495fe5ccee61b6576257fb59651981df3d4db Mon Sep 17 00:00:00 2001 From: Souheil Chelfouh Date: Thu, 30 Nov 2023 18:53:26 +0100 Subject: [PATCH 01/10] crack on the tests. --- deformdemo/test.py | 106 ++++++++++++++++++++++----------------------- 1 file changed, 52 insertions(+), 54 deletions(-) diff --git a/deformdemo/test.py b/deformdemo/test.py index 20c678c..df2f340 100644 --- a/deformdemo/test.py +++ b/deformdemo/test.py @@ -14,6 +14,8 @@ from selenium.common.exceptions import NoSuchElementException from selenium.common.exceptions import StaleElementReferenceException from selenium.common.exceptions import WebDriverException +from selenium.common.exceptions import TimeoutException +from selenium.common.exceptions import ElementClickInterceptedException from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys @@ -263,8 +265,12 @@ def setUpModule(): elif driver_name == "selenium_local_firefox": from selenium.webdriver import Firefox + from selenium.webdriver.firefox.options import Options + options = Options() + options.add_argument("-profile") + options.add_argument('/home/trollfot/snap/firefox/common/tmp/seleniumprofile') + browser = Firefox(options=options) - browser = Firefox() elif driver_name == "selenium_container_chrome": from selenium_containers import start_chrome @@ -405,7 +411,6 @@ def test_render_default(self): self.assertFalse(findid("deformField1-0").is_selected()) self.assertFalse(findid("deformField1-1").is_selected()) self.assertFalse(findid("deformField1-2").is_selected()) - self.assertEqual(findcss(".required").text, "Pepper") self.assertEqual(findid("captured").text, "None") def test_submit_unchecked(self): @@ -452,7 +457,6 @@ def test_render_default(self): self.assertFalse(findid("deformField1-0").is_selected()) self.assertFalse(findid("deformField1-1").is_selected()) self.assertFalse(findid("deformField1-2").is_selected()) - self.assertEqual(findcss(".required").text, "Pepper") self.assertEqual(findid("captured").text, "None") def test_submit_unchecked(self): @@ -507,13 +511,11 @@ class CheckboxWidgetTests(Base, unittest.TestCase): def test_render_default(self): self.assertTrue("I Want It!" in browser.page_source) self.assertFalse(findid("deformField1").is_selected()) - self.assertEqual(findcss(".required").text, "I Want It!") self.assertEqual(findid("captured").text, "None") def test_submit_unchecked(self): wait_to_click("#deformsubmit") - self.assertFalse(findid_view("deformField1").is_selected()) - self.assertEqual(findid_view("captured").text, "{'want': False}") + self.assertEqual(findid_view("deformField1").get_attribute("validationMessage"), "Please check this box if you want to proceed.") def test_submit_checked(self): findid("deformField1").click() @@ -536,7 +538,6 @@ class CheckedInputWidgetTests(Base, unittest.TestCase): def test_render_default(self): self.assertTrue("Email Address" in browser.page_source) - self.assertEqual(findcss(".required").text, "Email Address") self.assertEqual(findid("captured").text, "None") self.assertEqual( findid_view("deformField1").get_attribute("value"), "" @@ -548,15 +549,14 @@ def test_render_default(self): def test_submit_empty(self): wait_to_click("#deformsubmit") - self.assertTrue(findcss(".is-invalid")) - self.assertEqual(findid("error-deformField1").text, "Required") self.assertEqual( - findid_view("deformField1").get_attribute("value"), "" + findid("deformField1").get_attribute("validationMessage"), + "Please fill out this field." ) self.assertEqual( - findid("deformField1-confirm").get_attribute("value"), "" + findid("deformField1-confirm").get_attribute("validationMessage"), + "Please fill out this field." ) - self.assertEqual(findid("captured").text, "None") def test_submit_invalid(self): findid("deformField1").send_keys("this") @@ -613,7 +613,7 @@ class CheckedInputWidgetWithMaskTests(Base, unittest.TestCase): url = test_url("/checkedinput_withmask/") def test_render_default(self): - self.assertEqual(findcss(".required").text, "Social Security Number") + self.assertEqual(findcss(".form-label").text, "Social Security Number") self.assertEqual(findid("captured").text, "None") # Ensure the masked input has a focus and ### mask @@ -662,7 +662,6 @@ class CheckedInputReadonlyTests(Base, unittest.TestCase): def test_render_default(self): self.assertTrue("Email Address" in browser.page_source) - self.assertEqual(findcss(".required").text, "Email Address") self.assertEqual(findid("captured").text, "None") self.assertEqual(findid("deformField1").text, "ww@graymatter.com") @@ -724,7 +723,6 @@ class CheckedPasswordRedisplayWidgetTests(Base, unittest.TestCase): def test_render_default(self): self.assertTrue("Password" in browser.page_source) - self.assertEqual(findcss(".required").text, "Password") self.assertEqual(findid("captured").text, "None") self.assertEqual( findid_view("deformField1").get_attribute("value"), "" @@ -741,16 +739,11 @@ def test_render_default(self): ) def test_submit_empty(self): - wait_to_click("#deformsubmit") - self.assertTrue(findcss(".is-invalid")) - self.assertEqual(findid("error-deformField1").text, "Required") self.assertEqual( - findid_view("deformField1").get_attribute("value"), "" + findid("deformField1").get_attribute('required'), + 'true' ) - self.assertEqual( - findid("deformField1-confirm").get_attribute("value"), "" - ) - self.assertEqual(findid("captured").text, "None") + wait_to_click("#deformsubmit") def test_submit_tooshort(self): findid("deformField1").send_keys("this") @@ -802,7 +795,6 @@ class CheckedPasswordReadonlyTests(Base, unittest.TestCase): def test_render_default(self): self.assertTrue("Password" in browser.page_source) - self.assertEqual(findcss(".required").text, "Password") self.assertEqual(findid("captured").text, "None") self.assertEqual( findid("deformField1").text, "Password not displayed." @@ -816,7 +808,6 @@ class DateInputWidgetTests(Base, unittest.TestCase): def test_render_default(self): clear_autofocused_picker() self.assertTrue("Date" in browser.page_source) - self.assertEqual(findcss(".required").text, "Date") self.assertEqual(findid_view("captured").text, "None") self.assertEqual( findid_view("deformField1").get_attribute("value"), "" @@ -825,13 +816,15 @@ def test_render_default(self): def test_submit_empty(self): clear_autofocused_picker() + self.assertEqual( + findid("deformField1").get_attribute("validationMessage"), + "" + ) wait_to_click("#deformsubmit") - self.assertTrue(findcss(".is-invalid")) - self.assertEqual(findid_view("error-deformField1").text, "Required") self.assertEqual( - findid_view("deformField1").get_attribute("value"), "" + findid("deformField1").get_attribute("validationMessage"), + "Please fill out this field." ) - self.assertEqual(findid_view("captured").text, "None") def test_submit_tooearly(self): clear_autofocused_picker() @@ -1678,20 +1671,13 @@ def test_render_default(self): self.assertTrue("Password" in browser.page_source) self.assertEqual(findid("captured").text, "None") self.assertRaises(NoSuchElementException, findcss, ".is-invalid") - self.assertEqual(findcss(".required").text, "Password") self.assertEqual( findid_view("deformField1").get_attribute("value"), "" ) def test_render_submit_empty(self): wait_to_click("#deformsubmit") - self.assertTrue("Password" in browser.page_source) - self.assertEqual(findcss(".required").text, "Password") - self.assertEqual(findid("captured").text, "None") - self.assertEqual( - findid_view("deformField1").get_attribute("value"), "" - ) - self.assertEqual(findid("error-deformField1").text, "Required") + def test_render_submit_success(self): findid("deformField1").send_keys("abcdef123") @@ -1714,15 +1700,23 @@ def test_render_default(self): self.assertFalse(findid("deformField1-0").is_selected()) self.assertFalse(findid("deformField1-1").is_selected()) self.assertFalse(findid("deformField1-2").is_selected()) - self.assertEqual(findcss(".required").text, "Choose your pepper") self.assertEqual(findid("captured").text, "None") def test_submit_unchecked(self): + self.assertEqual( + findid("deformField1-0").get_attribute('required'), + 'true' + ) + self.assertEqual( + findid("deformField1-1").get_attribute('required'), + 'true' + ) + self.assertEqual( + findid("deformField1-2").get_attribute('required'), + 'true' + ) wait_to_click("#deformsubmit") - self.assertEqual(findid("error-deformField1").text, "Required") - self.assertFalse(findid("deformField1-0").is_selected()) - self.assertFalse(findid("deformField1-1").is_selected()) - self.assertFalse(findid("deformField1-2").is_selected()) + # Fixme : test it was not submitted at all self.assertEqual(findid("captured").text, "None") def test_submit_one_checked(self): @@ -1744,16 +1738,23 @@ def test_render_default(self): self.assertFalse(findid("deformField1-0").is_selected()) self.assertFalse(findid("deformField1-1").is_selected()) self.assertFalse(findid("deformField1-2").is_selected()) - self.assertEqual(findcss(".required").text, "Choose your pepper") self.assertEqual(findid("captured").text, "None") def test_submit_unchecked(self): + self.assertEqual( + findid("deformField1-0").get_attribute('required'), + 'true' + ) + self.assertEqual( + findid("deformField1-1").get_attribute('required'), + 'true' + ) + self.assertEqual( + findid("deformField1-2").get_attribute('required'), + 'true' + ) wait_to_click("#deformsubmit") - self.assertEqual(findid("error-deformField1").text, "Required") - self.assertFalse(findid("deformField1-0").is_selected()) - self.assertFalse(findid("deformField1-1").is_selected()) - self.assertFalse(findid("deformField1-2").is_selected()) - self.assertEqual(findid("captured").text, "None") + # Fixme : test it was not submitted at all def test_submit_one_checked(self): findid("deformField1-0").click() @@ -1783,7 +1784,6 @@ class RadioChoiceReadonlyTests(Base, unittest.TestCase): def test_render_default(self): self.assertEqual(findid("deformField1-1").text, "Jalapeno") - self.assertEqual(findcss(".required").text, "Pepper") self.assertEqual(findid("captured").text, "None") @@ -3365,7 +3365,7 @@ def test_submit_complex_interaction(self): ActionChains(browser).drag_and_drop_by_offset( persons[0], 0, seq_height * 1.5 ).perform() - + ActionChains(browser).scroll_by_amount(0, 200).perform() time.sleep(0.2) action_chains_on_id("deformsubmit").click().perform() @@ -3740,8 +3740,7 @@ def test_render_radio_default(self): self.assertTrue(element0.get_attribute("disabled"), "disabled") self.assertTrue(element0.get_attribute("readonly"), "readonly") self.assertFalse(element0.is_selected()) - element0.click() - self.assertFalse(element0.is_selected()) + self.assertRaises(ElementClickInterceptedException, element0.click) self.assertIsNone(element1.get_attribute("disabled")) self.assertTrue(element1.get_attribute("readonly"), "readonly") @@ -3752,8 +3751,7 @@ def test_render_radio_default(self): self.assertTrue(element2.get_attribute("disabled"), "disabled") self.assertTrue(element2.get_attribute("readonly"), "readonly") self.assertFalse(element2.is_selected()) - element2.click() - self.assertFalse(element2.is_selected()) + self.assertRaises(ElementClickInterceptedException, element2.click) def test_render_select_single_default(self): self.assertTrue("Select Single" in browser.page_source) From 5c3b023a8fb693c06bd8075a129cf51b24fe8d5e Mon Sep 17 00:00:00 2001 From: Souheil Chelfouh Date: Fri, 1 Dec 2023 16:49:33 +0100 Subject: [PATCH 02/10] More test fixing, for required/invlide --- deformdemo/test.py | 94 ++++++++++++++++++---------------------------- 1 file changed, 36 insertions(+), 58 deletions(-) diff --git a/deformdemo/test.py b/deformdemo/test.py index df2f340..627c257 100644 --- a/deformdemo/test.py +++ b/deformdemo/test.py @@ -817,14 +817,10 @@ def test_render_default(self): def test_submit_empty(self): clear_autofocused_picker() self.assertEqual( - findid("deformField1").get_attribute("validationMessage"), - "" + findid("deformField1").get_attribute("validationMessage"), "" ) wait_to_click("#deformsubmit") - self.assertEqual( - findid("deformField1").get_attribute("validationMessage"), - "Please fill out this field." - ) + self.assertEqual(findid_view("captured").text, "None") def test_submit_tooearly(self): clear_autofocused_picker() @@ -879,7 +875,6 @@ class TimeInputWidgetTests(Base, unittest.TestCase): def test_render_default(self): self.assertTrue("Time" in browser.page_source) - self.assertEqual(findcss(".required").text, "Time") self.assertEqual(findid("captured").text, "None") self.assertEqual( findid_view("deformField1").get_attribute("value"), "" @@ -888,13 +883,10 @@ def test_render_default(self): def test_submit_empty(self): clear_autofocused_picker() - wait_to_click("#deformsubmit") - self.assertTrue(findcss(".is-invalid")) - self.assertEqual(findid_view("error-deformField1").text, "Required") self.assertEqual( - findid_view("deformField1").get_attribute("value"), "" + findid("deformField1").get_attribute("validationMessage"), + "Please enter a number." ) - self.assertEqual(findid_view("captured").text, "None") def test_submit_tooearly(self): wait_to_click("#deformField1") @@ -923,7 +915,6 @@ class DateTimeInputWidgetTests(Base, unittest.TestCase): url = test_url("/datetimeinput/") def test_render_default(self): - self.assertEqual(findcss(".required").text, "Date Time") self.assertEqual(findid("captured").text, "None") self.assertEqual( findid("deformField1-date").get_attribute("value"), "" @@ -1019,7 +1010,6 @@ class DateTimeInputReadonlyTests(Base, unittest.TestCase): url = test_url("/datetimeinput_readonly/") def test_render_default(self): - self.assertEqual(findcss(".required").text, "Date Time") self.assertEqual(findid("captured").text, "None") self.assertEqual(findid("deformField1").text, "2011-05-05 01:02:00") @@ -1029,7 +1019,6 @@ class DatePartsWidgetTests(Base, unittest.TestCase): def test_render_default(self): self.assertTrue("Date" in browser.page_source) - self.assertEqual(findcss(".required").text, "Date") self.assertEqual(findid("captured").text, "None") self.assertEqual( findid_view("deformField1").get_attribute("value"), "" @@ -1037,50 +1026,52 @@ def test_render_default(self): self.assertEqual( findid("deformField1-month").get_attribute("value"), "" ) - self.assertEqual(findid("deformField1-day").get_attribute("value"), "") + self.assertEqual( + findid("deformField1-day").get_attribute("value"), + "" + ) self.assertRaises(NoSuchElementException, findcss, ".is-invalid") def test_submit_empty(self): - wait_to_click("#deformsubmit") - self.assertEqual(findid("error-deformField1").text, "Required") - self.assertEqual(findid("captured").text, "None") self.assertEqual( - findid_view("deformField1").get_attribute("value"), "" + findid("deformField1").get_attribute("validationMessage"), + "Please enter a number." ) self.assertEqual( - findid("deformField1-month").get_attribute("value"), "" + findid("deformField1-month").get_attribute("validationMessage"), + "Please enter a number." + ) + self.assertEqual( + findid("deformField1-day").get_attribute("validationMessage"), + "Please enter a number." ) - self.assertEqual(findid("deformField1-day").get_attribute("value"), "") - self.assertTrue(findcss(".is-invalid")) def test_submit_only_year(self): findid("deformField1").send_keys("2010") - wait_to_click("#deformsubmit") - self.assertEqual(findid("error-deformField1").text, "Incomplete date") - self.assertEqual(findid("captured").text, "None") self.assertEqual( - findid_view("deformField1").get_attribute("value"), "2010" + findid("deformField1").get_attribute("validationMessage"), "" ) self.assertEqual( - findid("deformField1-month").get_attribute("value"), "" + findid("deformField1-month").get_attribute("validationMessage"), "Please enter a number." + ) + self.assertEqual( + findid("deformField1-day").get_attribute("validationMessage"), "Please enter a number." ) - self.assertEqual(findid("deformField1-day").get_attribute("value"), "") - self.assertTrue(findcss(".is-invalid")) def test_submit_only_year_and_month(self): findid("deformField1").send_keys("2010") findid("deformField1-month").send_keys("1") - wait_to_click("#deformsubmit") - self.assertTrue(findcss(".is-invalid")) - self.assertEqual(findid("error-deformField1").text, "Incomplete date") - self.assertEqual(findid("captured").text, "None") + self.assertEqual( - findid_view("deformField1").get_attribute("value"), "2010" + findid("deformField1").get_attribute("validationMessage"), "" ) self.assertEqual( - findid("deformField1-month").get_attribute("value"), "1" + findid("deformField1-month").get_attribute("validationMessage"), "" + ) + + self.assertEqual( + findid("deformField1-day").get_attribute("validationMessage"), "Please enter a number." ) - self.assertEqual(findid("deformField1-day").get_attribute("value"), "") def test_submit_tooearly(self): findid("deformField1").send_keys("2008") @@ -1128,7 +1119,6 @@ class DatePartsReadonlyTests(Base, unittest.TestCase): def test_render_default(self): self.assertTrue("Date" in browser.page_source) - self.assertEqual(findcss(".required").text, "Date") self.assertEqual(findid("captured").text, "None") self.assertEqual(findid("deformField1").text, "2010/05/05") self.assertRaises(NoSuchElementException, findcss, ".is-invalid") @@ -2298,7 +2288,6 @@ def test_render_default(self): [o.text for o in options], ["- Select -", "Habanero", "Jalapeno", "Chipotle"], ) - self.assertEqual(findcss(".required").text, "Pepper") self.assertEqual(findid("captured").text, "None") def test_submit_default(self): @@ -2367,7 +2356,6 @@ def test_render_default(self): self.assertEqual( [o.text for o in options], ["- Select -", "Zero", "One", "Two"] ) - self.assertEqual(findcss(".required").text, "Number") self.assertEqual(findid("captured").text, "None") def test_submit_default(self): @@ -2414,7 +2402,6 @@ def test_render_default(self): "John Bonham", ], ) - self.assertEqual(findcss(".required").text, "Musician") self.assertEqual(findid("captured").text, "None") self.assertEqual(len(findxpaths("//optgroup")), 2) @@ -2452,7 +2439,6 @@ def test_render_default(self): "Drummers - John Bonham", ], ) - self.assertEqual(findcss(".required").text, "Musician") self.assertEqual(findid("captured").text, "None") self.assertEqual(len(findxpaths("//optgroup")), 2) @@ -2528,7 +2514,6 @@ def test_render_default(self): [o.text for o in options], ["- Select -", "Habanero", "Jalapeno", "Chipotle"], ) - self.assertEqual(findcss(".required").text, "Pepper") self.assertEqual(findid("captured").text, "None") def test_submit_default(self): @@ -2612,7 +2597,6 @@ def test_render_default(self): "John Bonham", ], ) - self.assertEqual(findcss(".required").text, "Musician") self.assertEqual(findid("captured").text, "None") self.assertEqual(len(findxpaths("//optgroup")), 2) @@ -2722,7 +2706,6 @@ def test_render_default(self): [o.text for o in options], ["- Select -", "Habanero", "Jalapeno", "Chipotle"], ) - self.assertEqual(findcss(".required").text, "Pepper") self.assertEqual(findid("captured").text, "None") def test_submit_default(self): @@ -2804,7 +2787,6 @@ def test_render_default(self): self.assertEqual( len(browser.find_elements(By.CSS_SELECTOR, "div.optgroup")), 2 ) - self.assertEqual(findcss(".required").text, "Musician") self.assertEqual(findid("captured").text, "None") def test_submit_selected(self): @@ -2911,7 +2893,6 @@ def test_render_default(self): self.assertEqual(element.get_attribute("name"), "text") self.assertEqual(element.get_attribute("type"), "text") self.assertEqual(element.get_attribute("value"), "") - self.assertEqual(findcss(".required").text, "Text") self.assertEqual(findid("captured").text, "None") def test_submit_empty(self): @@ -2946,7 +2927,6 @@ def test_render_default(self): self.assertEqual(element.get_attribute("step"), "0.01") self.assertEqual(element.get_attribute("min"), "0") self.assertEqual(element.get_attribute("max"), "99.99") - self.assertEqual(findcss(".required").text, "Hours Worked") self.assertEqual(findid("captured").text, "None") def test_submit_empty(self): @@ -2996,7 +2976,6 @@ def test_render_default(self): self.assertEqual( findid_view("deformField1").get_attribute("value"), "0.12" ) - self.assertEqual(findcss(".required").text, "Greenbacks") self.assertEqual(findid("captured").text, "None") def test_submit_empty(self): @@ -3036,7 +3015,6 @@ def test_render_default(self): self.assertEqual( findid_view("deformField1").get_attribute("value"), "" ) - self.assertEqual(findcss(".required").text, "Text") self.assertEqual(findid("captured").text, "None") def test_submit_empty(self): @@ -3095,7 +3073,6 @@ def test_render_default(self): self.assertEqual( findid_view("deformField1").get_attribute("value"), "" ) - self.assertEqual(findcss(".required").text, "Text") self.assertEqual(findid("captured").text, "None") def test_submit_empty(self): @@ -3133,7 +3110,6 @@ def test_render_default(self): self.assertEqual( findid_view("deformField1").get_attribute("cols"), "60" ) - self.assertEqual(findcss(".required").text, "Text") self.assertEqual(findid("captured").text, "None") def test_submit_empty(self): @@ -3154,7 +3130,6 @@ class TextAreaReadonlyTests(Base, unittest.TestCase): def test_render_default(self): self.assertEqual(findid("deformField1").text, "text") - self.assertEqual(findcss(".required").text, "Text") self.assertEqual(findid("captured").text, "None") @@ -3186,7 +3161,6 @@ def test_render_default(self): self.assertEqual( findid_view("deformField1").get_attribute("value"), "" ) - self.assertEqual(findcss(".required").text, "Text") self.assertEqual(findid("captured").text, "None") def test_submit_empty(self): @@ -3220,7 +3194,6 @@ class RichTextReadonlyTests(Base, unittest.TestCase): def test_render_default(self): self.assertEqual(findid("deformField1").text, "

Hi!

") - self.assertEqual(findcss(".required").text, "Text") self.assertEqual(findid("captured").text, "None") @@ -3407,7 +3380,6 @@ def test_render_default(self): findid_view("deformField1").get_attribute("value"), "1,hello,4.5\n2,goodbye,5.5\n", ) - self.assertEqual(findcss(".required").text, "Csv") self.assertEqual(findid("captured").text, "None") def test_submit_default(self): @@ -3433,9 +3405,16 @@ def test_submit_line_error(self): ) def test_submit_empty(self): + self.assertEqual( + findid_view("deformField1").get_attribute("validationMessage"), + "" + ) findid("deformField1").clear() + self.assertEqual( + findid_view("deformField1").get_attribute("validationMessage"), + "Please fill out this field." + ) wait_to_click("#deformsubmit") - self.assertEqual(findid("error-deformField1").text, "Required") self.assertEqual(findid("captured").text, "None") @@ -3451,7 +3430,6 @@ def test_render_default(self): self.assertEqual( findid_view("deformField1").get_attribute("value"), "1,hello,4.5" ) - self.assertEqual(findcss(".required").text, "Csv") self.assertEqual(findid("captured").text, "None") def test_submit_default(self): From 404f10f84d3baac1daec4baafcbe88b2945447be Mon Sep 17 00:00:00 2001 From: Souheil Chelfouh Date: Fri, 1 Dec 2023 16:50:06 +0100 Subject: [PATCH 03/10] using the right fork for deform --- requirements-dev.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/requirements-dev.txt b/requirements-dev.txt index edf6113..e5735b5 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -1,3 +1,2 @@ --e git+https://github.com/Pylons/deform.git@main#egg=deform +-e git+https://github.com/novareto/deform.git@main#egg=deform -e ".[testing]" - From 68078330c65adf7a53ced5023ee906f52eeb7f79 Mon Sep 17 00:00:00 2001 From: Souheil Chelfouh Date: Fri, 1 Dec 2023 17:19:18 +0100 Subject: [PATCH 04/10] removed custom profile that circumvent problem in ubuntu --- deformdemo/test.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/deformdemo/test.py b/deformdemo/test.py index 627c257..a24265a 100644 --- a/deformdemo/test.py +++ b/deformdemo/test.py @@ -265,12 +265,7 @@ def setUpModule(): elif driver_name == "selenium_local_firefox": from selenium.webdriver import Firefox - from selenium.webdriver.firefox.options import Options - options = Options() - options.add_argument("-profile") - options.add_argument('/home/trollfot/snap/firefox/common/tmp/seleniumprofile') - browser = Firefox(options=options) - + browser = Firefox() elif driver_name == "selenium_container_chrome": from selenium_containers import start_chrome From f0d3f5aa07b2fab6e8026215e8b20280bf366c99 Mon Sep 17 00:00:00 2001 From: Souheil Chelfouh Date: Fri, 8 Dec 2023 18:28:59 +0100 Subject: [PATCH 05/10] Fixing tests. Mostly required stuff, due to the html5 validation --- deformdemo/test.py | 83 +++++++++++++++++++++++++++------------------- 1 file changed, 49 insertions(+), 34 deletions(-) diff --git a/deformdemo/test.py b/deformdemo/test.py index a24265a..57bc858 100644 --- a/deformdemo/test.py +++ b/deformdemo/test.py @@ -265,6 +265,7 @@ def setUpModule(): elif driver_name == "selenium_local_firefox": from selenium.webdriver import Firefox + browser = Firefox() elif driver_name == "selenium_container_chrome": @@ -878,10 +879,11 @@ def test_render_default(self): def test_submit_empty(self): clear_autofocused_picker() - self.assertEqual( - findid("deformField1").get_attribute("validationMessage"), - "Please enter a number." - ) + # FIXME + #self.assertEqual( + # findid("deformField1").get_attribute("validationMessage"), + # "Please enter a number." + #) def test_submit_tooearly(self): wait_to_click("#deformField1") @@ -1149,15 +1151,14 @@ def test_render_default(self): self.assertEqual(findid("captured").text, "None") def test_submit_empty(self): - wait_to_click("#deformsubmit") - self.assertTrue(findcss(".is-invalid")) - self.assertEqual(findid("error-deformField3").text, "Required") - self.assertEqual(findid("captured").text, "None") + self.assertEqual( + findid("deformField3").get_attribute( + "validationMessage"), "Please fill out this field." + ) def test_submit_success(self): findid("deformField3").send_keys("name") wait_to_click("#deformsubmit") - self.assertRaises(NoSuchElementException, findcss, ".is-invalid") self.assertEqual( findid_view("deformField1").get_attribute("value"), "42" ) @@ -1195,22 +1196,38 @@ def test_render_default(self): self.assertEqual(findid("deformField4-day").get_attribute("value"), "") def test_submit_empty(self): - wait_to_click("#deformsubmit") - self.assertTrue(findcss(".is-invalid")) - self.assertEqual(findid("error-deformField1").text, "Required") - self.assertEqual(findid("error-deformField3").text, "Required") - self.assertEqual(findid("error-deformField4").text, "Required") - self.assertEqual(findid("captured").text, "None") + self.assertEqual( + findid("deformField1").get_attribute( + "validationMessage"), "Please fill out this field." + ) + self.assertEqual( + findid("deformField3").get_attribute( + "validationMessage"), "Please fill out this field." + ) + self.assertEqual( + findid("deformField4").get_attribute( + "validationMessage"), "Please enter a number." + ) + self.assertEqual( + findid("deformField4-month").get_attribute( + "validationMessage"), "Please enter a number." + ) + self.assertEqual( + findid("deformField4-day").get_attribute( + "validationMessage"), "Please enter a number." + ) def test_submit_invalid_number(self): findid("deformField1").send_keys("notanumber") + findid("deformField3").send_keys("test") + findid("deformField4").send_keys("2023") + findid("deformField4-month").send_keys("12") + findid("deformField4-day").send_keys("24") wait_to_click("#deformsubmit") self.assertTrue(findcss(".is-invalid")) self.assertEqual( findid("error-deformField1").text, '"notanumber" is not a number' ) - self.assertEqual(findid("error-deformField3").text, "Required") - self.assertEqual(findid("error-deformField4").text, "Required") self.assertEqual(findid("captured").text, "None") def test_submit_invalid_date(self): @@ -1278,8 +1295,10 @@ def test_render_default(self): self.assertEqual(findid("captured").text, "None") def test_submit_empty(self): - wait_to_click("#deformsubmit") - self.assertTrue(findcss(".is-invalid")) + self.assertEqual( + findid("deformField3").get_attribute( + "validationMessage"), "Please fill out this field." + ) self.assertEqual( findid_view("deformField1").get_attribute("value"), "Grandaddy" ) @@ -1287,8 +1306,6 @@ def test_submit_empty(self): findid("deformField2").get_attribute("value"), "Just Like the Fambly Cat", ) - self.assertEqual(findid("deformField3").get_attribute("value"), "") - self.assertEqual(findid("error-deformField3").text, "Required") def test_submit_success(self): findid("deformField1").clear() @@ -1322,14 +1339,14 @@ def test_render_default(self): self.assertEqual(findid("captured").text, "None") def test_submit_empty(self): - wait_to_click("#deformsubmit") - self.assertTrue(findcss(".is-invalid")) self.assertEqual( - findid_view("deformField1").get_attribute("value"), "" + findid("deformField1").get_attribute( + "validationMessage"), "Please fill out this field." + ) + self.assertEqual( + findid("deformField2").get_attribute( + "validationMessage"), "" ) - self.assertEqual(findid("deformField2").get_attribute("value"), "") - self.assertEqual(findid("error-deformField1").text, "Required") - self.assertEqual(findid("captured").text, "None") def test_submit_success_required_filled_notrequired_empty(self): findid("deformField1").send_keys("abc") @@ -1880,10 +1897,7 @@ def test_submit_none_added(self): def test_submit_two_unfilled(self): findid("deformField1-seqAdd").click() findid("deformField1-seqAdd").click() - wait_to_click("#deformsubmit") - self.assertEqual(findid("error-deformField3").text, "Required") - self.assertEqual(findid("error-deformField4").text, "Required") - self.assertEqual(findid("captured").text, "None") + # FIXME def test_upload_one_success(self): path, filename = _getFile() @@ -3445,9 +3459,10 @@ def test_submit_line_error(self): def test_submit_empty(self): findid("deformField1").clear() - wait_to_click("#deformsubmit") - self.assertEqual(findid("error-deformField1").text, "Required") - self.assertEqual(findid("captured").text, "None") + self.assertEqual( + findid_view("deformField1").get_attribute("validationMessage"), + "Please fill out this field." + ) class MultipleFormsTests(Base, unittest.TestCase): From fcce42415a151eb7dcf9e56d01008330cb33e8e4 Mon Sep 17 00:00:00 2001 From: Souheil Chelfouh Date: Wed, 13 Dec 2023 17:31:46 +0100 Subject: [PATCH 06/10] Introduced a novalidate way to check for deform behavior when submitted with wrong data. Moved all html5-required tests to dedicated methods. Reintroduced all previously removed tests for direct submission without html5 validation --- deformdemo/test.py | 337 ++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 302 insertions(+), 35 deletions(-) diff --git a/deformdemo/test.py b/deformdemo/test.py index 57bc858..b12678c 100644 --- a/deformdemo/test.py +++ b/deformdemo/test.py @@ -106,6 +106,12 @@ def action_chains_on_css_selector(css_selector): return ActionChains(browser).move_to_element(findcss(css_selector)) +def disable_html5_validation(): + browser.execute_script( + "document.getElementById('deform').noValidate = true;" + ) + + @give_selenium_some_time def findid(elid, clickable=True): """Find Selenium element by CSS id. @@ -264,9 +270,16 @@ def setUpModule(): browser = Chrome() elif driver_name == "selenium_local_firefox": - from selenium.webdriver import Firefox + #from selenium.webdriver import Firefox - browser = Firefox() + #browser = Firefox() + + from selenium.webdriver import Firefox + from selenium.webdriver.firefox.options import Options + options = Options() + options.add_argument("-profile") + options.add_argument('/home/trollfot/snap/firefox/common/tmp/seleniumprofile') + browser = Firefox(options=options) elif driver_name == "selenium_container_chrome": from selenium_containers import start_chrome @@ -544,7 +557,19 @@ def test_render_default(self): self.assertRaises(NoSuchElementException, findcss, ".is-invalid") def test_submit_empty(self): + disable_html5_validation() wait_to_click("#deformsubmit") + self.assertTrue(findcss(".is-invalid")) + self.assertEqual(findid("error-deformField1").text, "Required") + self.assertEqual( + findid_view("deformField1").get_attribute("value"), "" + ) + self.assertEqual( + findid("deformField1-confirm").get_attribute("value"), "" + ) + self.assertEqual(findid("captured").text, "None") + + def test_submit_empty_html5(self): self.assertEqual( findid("deformField1").get_attribute("validationMessage"), "Please fill out this field." @@ -735,11 +760,27 @@ def test_render_default(self): ) def test_submit_empty(self): + disable_html5_validation() + wait_to_click("#deformsubmit") + self.assertTrue(findcss(".is-invalid")) + self.assertEqual(findid("error-deformField1").text, "Required") + self.assertEqual( + findid_view("deformField1").get_attribute("value"), "" + ) + self.assertEqual( + findid("deformField1-confirm").get_attribute("value"), "" + ) + self.assertEqual(findid("captured").text, "None") + + def test_submit_empty_html5(self): self.assertEqual( findid("deformField1").get_attribute('required'), 'true' ) - wait_to_click("#deformsubmit") + self.assertEqual( + findid("deformField1").get_attribute("validationMessage"), + "Please fill out this field." + ) def test_submit_tooshort(self): findid("deformField1").send_keys("this") @@ -811,13 +852,22 @@ def test_render_default(self): self.assertRaises(NoSuchElementException, findcss, ".is-invalid") def test_submit_empty(self): + disable_html5_validation() clear_autofocused_picker() + wait_to_click("#deformsubmit") + self.assertTrue(findcss(".is-invalid")) + self.assertEqual(findid_view("error-deformField1").text, "Required") self.assertEqual( - findid("deformField1").get_attribute("validationMessage"), "" + findid_view("deformField1").get_attribute("value"), "" ) - wait_to_click("#deformsubmit") self.assertEqual(findid_view("captured").text, "None") + def test_submit_empty_html5(self): + clear_autofocused_picker() + self.assertEqual( + findid("deformField1").get_attribute("validationMessage"), "" + ) + def test_submit_tooearly(self): clear_autofocused_picker() wait_to_click("#deformField1") @@ -878,12 +928,21 @@ def test_render_default(self): self.assertRaises(NoSuchElementException, findcss, ".is-invalid") def test_submit_empty(self): + disable_html5_validation() clear_autofocused_picker() - # FIXME - #self.assertEqual( - # findid("deformField1").get_attribute("validationMessage"), - # "Please enter a number." - #) + wait_to_click("#deformsubmit") + self.assertTrue(findcss(".is-invalid")) + self.assertEqual(findid_view("error-deformField1").text, "Required") + self.assertEqual( + findid_view("deformField1").get_attribute("value"), "" + ) + self.assertEqual(findid_view("captured").text, "None") + + def test_submit_empty_html5(self): + clear_autofocused_picker() + self.assertEqual( + findid("deformField1").get_attribute("validationMessage"), "" + ) def test_submit_tooearly(self): wait_to_click("#deformField1") @@ -1030,6 +1089,20 @@ def test_render_default(self): self.assertRaises(NoSuchElementException, findcss, ".is-invalid") def test_submit_empty(self): + disable_html5_validation() + wait_to_click("#deformsubmit") + self.assertEqual(findid("error-deformField1").text, "Required") + self.assertEqual(findid("captured").text, "None") + self.assertEqual( + findid_view("deformField1").get_attribute("value"), "" + ) + self.assertEqual( + findid("deformField1-month").get_attribute("value"), "" + ) + self.assertEqual(findid("deformField1-day").get_attribute("value"), "") + self.assertTrue(findcss(".is-invalid")) + + def test_submit_empty_html5(self): self.assertEqual( findid("deformField1").get_attribute("validationMessage"), "Please enter a number." @@ -1044,31 +1117,35 @@ def test_submit_empty(self): ) def test_submit_only_year(self): + disable_html5_validation() findid("deformField1").send_keys("2010") + wait_to_click("#deformsubmit") + self.assertEqual(findid("error-deformField1").text, "Incomplete date") + self.assertEqual(findid("captured").text, "None") self.assertEqual( - findid("deformField1").get_attribute("validationMessage"), "" - ) - self.assertEqual( - findid("deformField1-month").get_attribute("validationMessage"), "Please enter a number." + findid_view("deformField1").get_attribute("value"), "2010" ) self.assertEqual( - findid("deformField1-day").get_attribute("validationMessage"), "Please enter a number." + findid("deformField1-month").get_attribute("value"), "" ) + self.assertEqual(findid("deformField1-day").get_attribute("value"), "") + self.assertTrue(findcss(".is-invalid")) def test_submit_only_year_and_month(self): + disable_html5_validation() findid("deformField1").send_keys("2010") findid("deformField1-month").send_keys("1") - - self.assertEqual( - findid("deformField1").get_attribute("validationMessage"), "" - ) + wait_to_click("#deformsubmit") + self.assertTrue(findcss(".is-invalid")) + self.assertEqual(findid("error-deformField1").text, "Incomplete date") + self.assertEqual(findid("captured").text, "None") self.assertEqual( - findid("deformField1-month").get_attribute("validationMessage"), "" + findid_view("deformField1").get_attribute("value"), "2010" ) - self.assertEqual( - findid("deformField1-day").get_attribute("validationMessage"), "Please enter a number." + findid("deformField1-month").get_attribute("value"), "1" ) + self.assertEqual(findid("deformField1-day").get_attribute("value"), "") def test_submit_tooearly(self): findid("deformField1").send_keys("2008") @@ -1151,6 +1228,13 @@ def test_render_default(self): self.assertEqual(findid("captured").text, "None") def test_submit_empty(self): + disable_html5_validation() + wait_to_click("#deformsubmit") + self.assertTrue(findcss(".is-invalid")) + self.assertEqual(findid("error-deformField3").text, "Required") + self.assertEqual(findid("captured").text, "None") + + def test_submit_empty_html5(self): self.assertEqual( findid("deformField3").get_attribute( "validationMessage"), "Please fill out this field." @@ -1196,6 +1280,15 @@ def test_render_default(self): self.assertEqual(findid("deformField4-day").get_attribute("value"), "") def test_submit_empty(self): + disable_html5_validation() + wait_to_click("#deformsubmit") + self.assertTrue(findcss(".is-invalid")) + self.assertEqual(findid("error-deformField1").text, "Required") + self.assertEqual(findid("error-deformField3").text, "Required") + self.assertEqual(findid("error-deformField4").text, "Required") + self.assertEqual(findid("captured").text, "None") + + def test_submit_empty_html5(self): self.assertEqual( findid("deformField1").get_attribute( "validationMessage"), "Please fill out this field." @@ -1295,6 +1388,20 @@ def test_render_default(self): self.assertEqual(findid("captured").text, "None") def test_submit_empty(self): + disable_html5_validation() + wait_to_click("#deformsubmit") + self.assertTrue(findcss(".is-invalid")) + self.assertEqual( + findid_view("deformField1").get_attribute("value"), "Grandaddy" + ) + self.assertEqual( + findid("deformField2").get_attribute("value"), + "Just Like the Fambly Cat", + ) + self.assertEqual(findid("deformField3").get_attribute("value"), "") + self.assertEqual(findid("error-deformField3").text, "Required") + + def test_submit_empty_html5(self): self.assertEqual( findid("deformField3").get_attribute( "validationMessage"), "Please fill out this field." @@ -1339,6 +1446,17 @@ def test_render_default(self): self.assertEqual(findid("captured").text, "None") def test_submit_empty(self): + disable_html5_validation() + wait_to_click("#deformsubmit") + self.assertTrue(findcss(".is-invalid")) + self.assertEqual( + findid_view("deformField1").get_attribute("value"), "" + ) + self.assertEqual(findid("deformField2").get_attribute("value"), "") + self.assertEqual(findid("error-deformField1").text, "Required") + self.assertEqual(findid("captured").text, "None") + + def test_submit_empty_html5(self): self.assertEqual( findid("deformField1").get_attribute( "validationMessage"), "Please fill out this field." @@ -1502,6 +1620,7 @@ def test_render_default(self): self.assertEqual(findid_view("captured").text, "None") def test_submit_both_empty(self): + disable_html5_validation() wait_to_click("#deformsubmit") self.assertTrue(findcss(".is-invalid")) self.assertEqual(findid_view("error-deformField1").text, "Required") @@ -1515,6 +1634,7 @@ def test_submit_both_empty(self): self.assertEqual(findid_view("captured").text, "None") def test_submit_one_empty(self): + disable_html5_validation() findid("deformField1").send_keys("abc") wait_to_click("#deformsubmit") self.assertTrue(findcss(".is-invalid")) @@ -1601,6 +1721,7 @@ def test_render_ru(self): def test_submit_empty_en(self): browser.get("%s?_LOCALE_=en" % self.url) + disable_html5_validation() wait_to_click("#deformsubmit") self.assertEqual( findcss(".alert-danger").text, @@ -1613,6 +1734,7 @@ def test_submit_empty_en(self): def test_submit_empty_ru(self): browser.get("%s?_LOCALE_=ru" % self.url) + disable_html5_validation() wait_to_click("#deformsubmit") self.assertEqual( findcss(".alert-danger .error-msg-lbl").text, @@ -1678,8 +1800,24 @@ def test_render_default(self): ) def test_render_submit_empty(self): + disable_html5_validation() wait_to_click("#deformsubmit") + self.assertTrue("Password" in browser.page_source) + self.assertEqual(findid("captured").text, "None") + self.assertEqual( + findid_view("deformField1").get_attribute("value"), "" + ) + self.assertEqual(findid("error-deformField1").text, "Required") + def test_html5_attributes(self): + self.assertEqual( + findid("deformField1").get_attribute("required"), + "true" + ) + self.assertEqual( + findid_view("deformField1").get_attribute("validationMessage"), + "Please fill out this field." + ) def test_render_submit_success(self): findid("deformField1").send_keys("abcdef123") @@ -1705,6 +1843,15 @@ def test_render_default(self): self.assertEqual(findid("captured").text, "None") def test_submit_unchecked(self): + disable_html5_validation() + wait_to_click("#deformsubmit") + self.assertEqual(findid("error-deformField1").text, "Required") + self.assertFalse(findid("deformField1-0").is_selected()) + self.assertFalse(findid("deformField1-1").is_selected()) + self.assertFalse(findid("deformField1-2").is_selected()) + self.assertEqual(findid("captured").text, "None") + + def test_html5_attributes(self): self.assertEqual( findid("deformField1-0").get_attribute('required'), 'true' @@ -1717,9 +1864,6 @@ def test_submit_unchecked(self): findid("deformField1-2").get_attribute('required'), 'true' ) - wait_to_click("#deformsubmit") - # Fixme : test it was not submitted at all - self.assertEqual(findid("captured").text, "None") def test_submit_one_checked(self): findid("deformField1-0").click() @@ -1743,6 +1887,15 @@ def test_render_default(self): self.assertEqual(findid("captured").text, "None") def test_submit_unchecked(self): + disable_html5_validation() + wait_to_click("#deformsubmit") + self.assertEqual(findid("error-deformField1").text, "Required") + self.assertFalse(findid("deformField1-0").is_selected()) + self.assertFalse(findid("deformField1-1").is_selected()) + self.assertFalse(findid("deformField1-2").is_selected()) + self.assertEqual(findid("captured").text, "None") + + def test_html5_attributes(self): self.assertEqual( findid("deformField1-0").get_attribute('required'), 'true' @@ -1755,8 +1908,6 @@ def test_submit_unchecked(self): findid("deformField1-2").get_attribute('required'), 'true' ) - wait_to_click("#deformsubmit") - # Fixme : test it was not submitted at all def test_submit_one_checked(self): findid("deformField1-0").click() @@ -1895,9 +2046,13 @@ def test_submit_none_added(self): self.assertRaises(NoSuchElementException, findcss, ".is-invalid") def test_submit_two_unfilled(self): + disable_html5_validation() findid("deformField1-seqAdd").click() findid("deformField1-seqAdd").click() - # FIXME + wait_to_click("#deformsubmit") + self.assertEqual(findid("error-deformField3").text, "Required") + self.assertEqual(findid("error-deformField4").text, "Required") + self.assertEqual(findid("captured").text, "None") def test_upload_one_success(self): path, filename = _getFile() @@ -2027,6 +2182,7 @@ def test_submit_none_added(self): self.assertEqual(findid("captured").text, "{'people': []}") def test_submit_two_unfilled(self): + disable_html5_validation() findid("deformField1-seqAdd").click() findid("deformField1-seqAdd").click() wait_to_click("#deformsubmit") @@ -2082,6 +2238,7 @@ def test_render_default(self): self.assertEqual(findid("captured").text, "None") def test_submit_none_added(self): + disable_html5_validation() wait_to_click("#deformsubmit") self.assertEqual(findid("error-deformField6").text, "Required") self.assertEqual(findid("error-deformField7").text, "Required") @@ -2119,6 +2276,7 @@ def test_submit_none_added(self): self.assertEqual(findid("captured").text, "{'texts': []}") def test_submit_two_unfilled(self): + disable_html5_validation() findid("deformField1-seqAdd").click() findid("deformField1-seqAdd").click() wait_to_click("#deformsubmit") @@ -2260,6 +2418,7 @@ def test_submit_none_added(self): self.assertRaises(NoSuchElementException, findcss, ".is-invalid") def test_submit_two_unfilled(self): + disable_html5_validation() findid("deformField1-seqAdd").click() findid("deformField1-seqAdd").click() findid("deformsubmit").click() @@ -2300,6 +2459,7 @@ def test_render_default(self): self.assertEqual(findid("captured").text, "None") def test_submit_default(self): + disable_html5_validation() findid("deformsubmit").click() self.assertTrue("Pepper" in browser.page_source) select = findid("deformField1") @@ -2307,6 +2467,16 @@ def test_submit_default(self): self.assertEqual(findid("error-deformField1").text, "Required") self.assertEqual(findid("captured").text, "None") + def test_html5_attributes(self): + self.assertEqual( + findid("deformField1").get_attribute("required"), + "true" + ) + self.assertEqual( + findid_view("deformField1").get_attribute("validationMessage"), + "Please select an item in the list." + ) + def test_submit_selected(self): select = findid("deformField1") options = select.find_elements(By.TAG_NAME, "option") @@ -2368,6 +2538,7 @@ def test_render_default(self): self.assertEqual(findid("captured").text, "None") def test_submit_default(self): + disable_html5_validation() findid("deformsubmit").click() self.assertTrue("Number" in browser.page_source) select = findid("deformField1") @@ -2377,6 +2548,16 @@ def test_submit_default(self): self.assertEqual(findid("error-deformField1").text, "Required") self.assertEqual(findid("captured").text, "None") + def test_html5_attributes(self): + self.assertEqual( + findid("deformField1").get_attribute("required"), + "true" + ) + self.assertEqual( + findid_view("deformField1").get_attribute("validationMessage"), + "Please select an item in the list." + ) + def test_submit_selected(self): select = findid("deformField1") options = select.find_elements(By.TAG_NAME, "option") @@ -2525,7 +2706,18 @@ def test_render_default(self): ) self.assertEqual(findid("captured").text, "None") + def test_html5_attributes(self): + self.assertEqual( + findid("deformField1").get_attribute("required"), + "true" + ) + self.assertEqual( + findid_view("deformField1").get_attribute("validationMessage"), + "Please select an item in the list." + ) + def test_submit_default(self): + disable_html5_validation() findid("deformsubmit").click() self.assertTrue("Pepper" in browser.page_source) select = findid("deformField1") @@ -2536,6 +2728,7 @@ def test_submit_default(self): self.assertEqual(findid("captured").text, "None") def test_submit_selected(self): + disable_html5_validation() findid("deformsubmit").click() self.assertTrue(findcss(".is-invalid").is_displayed()) @@ -2905,6 +3098,7 @@ def test_render_default(self): self.assertEqual(findid("captured").text, "None") def test_submit_empty(self): + disable_html5_validation() findid("deformsubmit").click() element = findid("deformField1") self.assertEqual(element.get_attribute("name"), "text") @@ -2939,6 +3133,7 @@ def test_render_default(self): self.assertEqual(findid("captured").text, "None") def test_submit_empty(self): + disable_html5_validation() findid("deformField1").clear() findid("deformsubmit").click() element = findid("deformField1") @@ -2988,10 +3183,18 @@ def test_render_default(self): self.assertEqual(findid("captured").text, "None") def test_submit_empty(self): - findid("deformField1").send_keys("12") - findid("deformsubmit").click() + # Cannot submit empty money field. + # default value is always 0.00 + pass + + def test_html5_attributes(self): + self.assertEqual( + findid("deformField1").get_attribute("required"), + "true" + ) self.assertEqual( - findid("captured").text, "{'greenbacks': Decimal('0.12')}" + findid_view("deformField1").get_attribute("validationMessage"), + "Please fill out this field." ) def test_submit_filled(self): @@ -3027,11 +3230,22 @@ def test_render_default(self): self.assertEqual(findid("captured").text, "None") def test_submit_empty(self): + disable_html5_validation() findid("deformsubmit").click() self.assertEqual(findid("error-deformField1").text, "Required") self.assertTrue(findcss(".is-invalid")) self.assertEqual(findid("captured").text, "None") + def test_submit_empty_html5(self): + self.assertEqual( + findid("deformField1").get_attribute("required"), + "true" + ) + self.assertEqual( + findid_view("deformField1").get_attribute("validationMessage"), + "Please fill out this field." + ) + def test_submit_filled(self): findid("deformField1").send_keys("ba") self.assertTrue(findxpath('//p[text()="baz"]').is_displayed()) @@ -3085,10 +3299,21 @@ def test_render_default(self): self.assertEqual(findid("captured").text, "None") def test_submit_empty(self): + disable_html5_validation() findid("deformsubmit").click() self.assertEqual(findid("error-deformField1").text, "Required") self.assertEqual(findid("captured").text, "None") + def test_html5_attributes(self): + self.assertEqual( + findid("deformField1").get_attribute("required"), + "true" + ) + self.assertEqual( + findid_view("deformField1").get_attribute("validationMessage"), + "Please fill out this field." + ) + def test_submit_filled(self): findid("deformField1").send_keys("t") @@ -3122,11 +3347,22 @@ def test_render_default(self): self.assertEqual(findid("captured").text, "None") def test_submit_empty(self): + disable_html5_validation() findid("deformsubmit").click() self.assertEqual(findid("captured").text, "None") self.assertEqual(findid("error-deformField1").text, "Required") self.assertTrue(findcss(".is-invalid")) + def test_html5_attributes(self): + self.assertEqual( + findid("deformField1").get_attribute("required"), + "true" + ) + self.assertEqual( + findid_view("deformField1").get_attribute("validationMessage"), + "Please fill out this field." + ) + def test_submit_filled(self): findid("deformField1").send_keys("hello") findid("deformsubmit").click() @@ -3414,6 +3650,13 @@ def test_submit_line_error(self): ) def test_submit_empty(self): + disable_html5_validation() + findid("deformField1").clear() + wait_to_click("#deformsubmit") + self.assertEqual(findid("error-deformField1").text, "Required") + self.assertEqual(findid("captured").text, "None") + + def test_submit_empty_html5(self): self.assertEqual( findid_view("deformField1").get_attribute("validationMessage"), "" @@ -3423,8 +3666,6 @@ def test_submit_empty(self): findid_view("deformField1").get_attribute("validationMessage"), "Please fill out this field." ) - wait_to_click("#deformsubmit") - self.assertEqual(findid("captured").text, "None") class WidgetAdapterTests(TextAreaCSVWidgetTests): @@ -3541,6 +3782,7 @@ def test_render_default(self): self.assertEqual(findid("deformField4-day").get_attribute("value"), "") def test_submit_empty(self): + disable_html5_validation() source = browser.page_source wait_to_click("#deformsubmit") wait_for_ajax(source) @@ -3549,16 +3791,41 @@ def test_submit_empty(self): self.assertEqual(findid("error-deformField4").text, "Required") self.assertEqual(findid("captured").text, "None") + def test_submit_empty_html5(self): + self.assertEqual( + findid_view("deformField1").get_attribute("validationMessage"), + "Please fill out this field." + ) + self.assertEqual( + findid_view("deformField3").get_attribute("validationMessage"), + "Please fill out this field." + ) + self.assertEqual( + findid_view("deformField4").get_attribute("validationMessage"), + "Please enter a number." + ) + self.assertEqual( + findid_view("deformField4-month").get_attribute("validationMessage"), + "Please enter a number." + ) + self.assertEqual( + findid_view("deformField4-day").get_attribute("validationMessage"), + "Please enter a number." + ) + def test_submit_invalid(self): findid("deformField1").send_keys("notanumber") + findid("deformField3").send_keys("name") + findid("deformField4").send_keys("2010") + findid("deformField4-month").send_keys("1") + findid("deformField4-day").send_keys("1") + source = browser.page_source wait_to_click("#deformsubmit") wait_for_ajax(source) self.assertEqual( findid("error-deformField1").text, '"notanumber" is not a number' ) - self.assertEqual(findid("error-deformField3").text, "Required") - self.assertEqual(findid("error-deformField4").text, "Required") self.assertEqual(findid("captured").text, "None") def test_submit_success(self): From a145d7bd2d3419df6a104cf84c7e240c6b398712 Mon Sep 17 00:00:00 2001 From: Souheil Chelfouh Date: Wed, 13 Dec 2023 19:12:40 +0100 Subject: [PATCH 07/10] Fixed tests. Only 1 remaining. --- deformdemo/test.py | 88 +++++++++++++++++++++++++++------------------- 1 file changed, 52 insertions(+), 36 deletions(-) diff --git a/deformdemo/test.py b/deformdemo/test.py index b12678c..10a3909 100644 --- a/deformdemo/test.py +++ b/deformdemo/test.py @@ -270,16 +270,16 @@ def setUpModule(): browser = Chrome() elif driver_name == "selenium_local_firefox": - #from selenium.webdriver import Firefox + from selenium.webdriver import Firefox - #browser = Firefox() + browser = Firefox() - from selenium.webdriver import Firefox - from selenium.webdriver.firefox.options import Options - options = Options() - options.add_argument("-profile") - options.add_argument('/home/trollfot/snap/firefox/common/tmp/seleniumprofile') - browser = Firefox(options=options) + # from selenium.webdriver import Firefox + # from selenium.webdriver.firefox.options import Options + # options = Options() + # options.add_argument("-profile") + # options.add_argument('/home/trollfot/snap/firefox/common/tmp/seleniumprofile') + # browser = Firefox(options=options) elif driver_name == "selenium_container_chrome": from selenium_containers import start_chrome @@ -1550,40 +1550,48 @@ def test_render_default(self): findcss("input[type=file]").get_attribute("value"), "" ) self.assertEqual( - findcss(".upload-filename").get_attribute("value"), "" + findcss("input[type=file]").get_attribute("data-filename"), None ) self.assertEqual(findid("captured").text, "None") def test_submit_empty(self): + disable_html5_validation() wait_to_click("#deformsubmit") self.assertTrue(findcss(".is-invalid")) self.assertEqual(findid("error-deformField1").text, "Required") self.assertEqual(findid("captured").text, "None") + def test_html5_attributes(self): + self.assertEqual( + findid("deformField1").get_attribute("required"), + "true" + ) + self.assertEqual( + findid_view("deformField1").get_attribute("validationMessage"), + "Please select a file." + ) + def test_submit_filled(self): # submit one first path, filename = _getFile() findcss("input[type=file]").send_keys(path) self.assertEqual( - findcss(".upload-filename").get_attribute("value"), filename + findcss("input[type=file]").get_attribute("value"), f"C:\\fakepath\\{filename}" ) wait_to_click("#deformsubmit") self.assertRaises(NoSuchElementException, findcss, ".is-invalid") + self.assertTrue(filename in findid("captured").text) self.assertEqual( - findcss("input[type=file]").get_attribute("value"), "" - ) - self.assertEqual( - findcss(".upload-filename").get_attribute("value"), filename + findcss("input[type=file]").get_attribute("data-filename"), filename ) - self.assertTrue(filename in findid("captured").text) uid = findcss("[name=uid]").get_attribute("value") self.assertTrue(uid in findid("captured").text) # resubmit without entering a new filename should not change the file wait_to_click("#deformsubmit") self.assertEqual( - findcss(".upload-filename").get_attribute("value"), filename + findcss("input[type=file]").get_attribute("data-filename"), filename ) self.assertEqual(findcss("[name=uid]").get_attribute("value"), uid) @@ -1591,8 +1599,9 @@ def test_submit_filled(self): path2, filename2 = _getFile("validation.py") findcss("input[type=file]").send_keys(path2) wait_to_click("#deformsubmit") - got_name = findcss(".upload-filename").get_attribute("value") - self.assertEqual(got_name, filename2) + self.assertEqual( + findcss("input[type=file]").get_attribute("data-filename"), filename2 + ) self.assertTrue("filename" in findid("captured").text) self.assertTrue(uid in findid("captured").text) @@ -2065,7 +2074,7 @@ def test_upload_one_success(self): findcss("input[type=file]").get_attribute("value"), "" ) self.assertEqual( - findcss(".upload-filename").get_attribute("value"), filename + findcss("input[type=file]").get_attribute("data-filename"), filename ) uid = findcss("[name=uid]").get_attribute("value") self.assertTrue(filename in findid("captured").text) @@ -2083,7 +2092,7 @@ def test_upload_multi_interaction(self): findcss("input[type=file]").get_attribute("value"), "" ) self.assertEqual( - findcss(".upload-filename").get_attribute("value"), filename + findcss("input[type=file]").get_attribute("data-filename"), filename ) uid = findcss("[name=uid]").get_attribute("value") self.assertTrue(filename in findid("captured").text) @@ -2099,7 +2108,7 @@ def test_upload_multi_interaction(self): findcss("input[type=file]").send_keys(path2) wait_to_click("#deformsubmit") self.assertEqual( - findcss(".upload-filename").get_attribute("value"), filename2 + findcss("input[type=file]").get_attribute("data-filename"), filename2 ) self.assertTrue(filename2 in findid("captured").text) @@ -2108,21 +2117,21 @@ def test_upload_multi_interaction(self): findid("deformField1-seqAdd").click() findxpaths('//input[@name="upload"]')[1].send_keys(path) wait_to_click("#deformsubmit") - upload_filenames = findcsses(".upload-filename") - self.assertEqual(upload_filenames[0].get_attribute("value"), filename2) - self.assertEqual(upload_filenames[1].get_attribute("value"), filename) + upload_filenames = findcsses("input[type=file]") + self.assertEqual(upload_filenames[0].get_attribute("data-filename"), filename2) + self.assertEqual(upload_filenames[1].get_attribute("data-filename"), filename) # resubmit should not change either file wait_to_click("#deformsubmit") - upload_filenames = findcsses(".upload-filename") - self.assertEqual(upload_filenames[0].get_attribute("value"), filename2) - self.assertEqual(upload_filenames[1].get_attribute("value"), filename) + upload_filenames = findcsses("input[type=file]") + self.assertEqual(upload_filenames[0].get_attribute("data-filename"), filename2) + self.assertEqual(upload_filenames[1].get_attribute("data-filename"), filename) # remove a file findid("deformField4-close").click() wait_to_click("#deformsubmit") - upload_filenames = findcsses(".upload-filename") - self.assertEqual(upload_filenames[0].get_attribute("value"), filename2) + upload_filenames = findcsses("input[type=file]") + self.assertEqual(upload_filenames[0].get_attribute("data-filename"), filename2) self.assertEqual(len(upload_filenames), 1) @@ -2135,6 +2144,7 @@ def test_render_default(self): self.assertEqual(findid("captured").text, "None") def test_submit_none_added(self): + disable_html5_validation() wait_to_click("#deformsubmit") self.assertEqual(findid("error-deformField3").text, "Required") self.assertEqual(findid("captured").text, "None") @@ -2144,18 +2154,18 @@ def test_upload_one_success(self): findid("deformField1-seqAdd").click() findxpaths('//input[@name="upload"]')[0].send_keys(path) upload_filenames = [ - elem.get_attribute("value") - for elem in findcsses(".upload-filename") + elem.get_attribute("data-filename") + for elem in findcsses("input[type=file]") ] - self.assertEqual(upload_filenames[0], filename) - self.assertEqual(upload_filenames[1], "") + self.assertEqual(upload_filenames[0], None) + self.assertEqual(upload_filenames[1], None) findxpaths('//input[@name="upload"]')[1].send_keys(path) wait_to_click("#deformsubmit") # first element present upload_filenames = [ - elem.get_attribute("value") - for elem in findcsses(".upload-filename") + elem.get_attribute("data-filename") + for elem in findcsses("input[type=file]") ] uid_elems = findcsses("[name=uid]") self.assertEqual(upload_filenames[0], filename) @@ -2496,6 +2506,12 @@ def test_submit_selected(self): class SelectWidgetWithSizeTests(SelectWidgetTests): url = test_url("/select_with_size/") + def test_html5_attributes(self): + self.assertEqual( + findid("deformField1").get_attribute("required"), + "true" + ) + class SelectWidgetWithUnicodeTests(SelectWidgetTests): url = test_url("/select_with_unicode/") @@ -3194,7 +3210,7 @@ def test_html5_attributes(self): ) self.assertEqual( findid_view("deformField1").get_attribute("validationMessage"), - "Please fill out this field." + "" ) def test_submit_filled(self): From 245ffd2fce6c0584b0ccdb46e325043be66771ea Mon Sep 17 00:00:00 2001 From: Souheil Chelfouh Date: Fri, 15 Dec 2023 17:49:23 +0100 Subject: [PATCH 08/10] Added scroll to tinymce delay test to bring it into view --- deformdemo/test.py | 1 + 1 file changed, 1 insertion(+) diff --git a/deformdemo/test.py b/deformdemo/test.py index 10a3909..b755fe4 100644 --- a/deformdemo/test.py +++ b/deformdemo/test.py @@ -3400,6 +3400,7 @@ class DelayedRichTextWidgetTests(Base, unittest.TestCase): def test_submit_filled(self): findcss(".tinymce-preload").click() time.sleep(0.5) + ActionChains(browser).scroll_by_amount(0, 200).perform() browser.switch_to.frame(browser.find_element(By.TAG_NAME, "iframe")) findid("tinymce").click() findid("tinymce").send_keys("hello") From f523c44f6e61664f958f864c000cafc2fe16dff9 Mon Sep 17 00:00:00 2001 From: Souheil Chelfouh Date: Fri, 15 Dec 2023 18:05:32 +0100 Subject: [PATCH 09/10] scroll after switching to iframe --- deformdemo/test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deformdemo/test.py b/deformdemo/test.py index b755fe4..ab4bfa2 100644 --- a/deformdemo/test.py +++ b/deformdemo/test.py @@ -3400,8 +3400,8 @@ class DelayedRichTextWidgetTests(Base, unittest.TestCase): def test_submit_filled(self): findcss(".tinymce-preload").click() time.sleep(0.5) - ActionChains(browser).scroll_by_amount(0, 200).perform() browser.switch_to.frame(browser.find_element(By.TAG_NAME, "iframe")) + ActionChains(browser).scroll_by_amount(0, 200).perform() findid("tinymce").click() findid("tinymce").send_keys("hello") browser.switch_to.default_content() From 10a9ff422b99fc816375c1a276f762d75b5c3874 Mon Sep 17 00:00:00 2001 From: Souheil Chelfouh Date: Mon, 12 Feb 2024 12:39:42 +0100 Subject: [PATCH 10/10] fixing tinymce preload --- deformdemo/test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deformdemo/test.py b/deformdemo/test.py index ab4bfa2..c6eaca6 100644 --- a/deformdemo/test.py +++ b/deformdemo/test.py @@ -3398,7 +3398,7 @@ class DelayedRichTextWidgetTests(Base, unittest.TestCase): url = test_url("/delayed_richtext/") def test_submit_filled(self): - findcss(".tinymce-preload").click() + findcss(".tinymce").click() time.sleep(0.5) browser.switch_to.frame(browser.find_element(By.TAG_NAME, "iframe")) ActionChains(browser).scroll_by_amount(0, 200).perform()