diff --git a/src/widgetastic/browser.py b/src/widgetastic/browser.py index 6a68f43..0aa2dc4 100644 --- a/src/widgetastic/browser.py +++ b/src/widgetastic/browser.py @@ -856,7 +856,7 @@ def middle_of(self, *args, **kwargs) -> Location: location = self.location_of(*args, **kwargs) return Location(int(location.x + size.width / 2), int(location.y + size.height / 2)) - def clear(self, locator: LocatorAlias, *args, **kwargs) -> None: + def clear(self, locator: LocatorAlias, *args, **kwargs) -> bool: """Clears a text input with given locator.""" self.logger.debug("clear: %r", locator) @@ -864,14 +864,20 @@ def clear(self, locator: LocatorAlias, *args, **kwargs) -> None: self.plugin.before_keyboard_input(el, None) self.click(locator, *args, **kwargs) + # CTRL + A doesn't work on 'number' types, as + # browser does not treat the numeric value as selectable text + if el.get_attribute("type") == "number": + self.execute_script("arguments[0].value = '';", el) + el.send_keys(Keys.SPACE, Keys.BACK_SPACE) + ActionChains(self.selenium).key_down(Keys.CONTROL).send_keys("a").key_up( Keys.CONTROL ).perform() - result = el.send_keys(Keys.DELETE) + el.send_keys(Keys.DELETE) self.plugin.after_keyboard_input(el, None) - return result + return el.get_attribute("value") == "" def is_selected(self, *args, **kwargs) -> bool: return self.element(*args, **kwargs).is_selected() diff --git a/testing/html/testing_page.html b/testing/html/testing_page.html index ca4f498..113c97d 100644 --- a/testing/html/testing_page.html +++ b/testing/html/testing_page.html @@ -34,6 +34,7 @@ + diff --git a/testing/test_browser.py b/testing/test_browser.py index 3e23735..4d644b1 100644 --- a/testing/test_browser.py +++ b/testing/test_browser.py @@ -181,6 +181,13 @@ def test_simple_input_send_keys_clear(browser): assert browser.get_attribute("value", "#input") == "" +def test_clear_input_type_number(browser): + browser.send_keys("3", "#input_number") + assert browser.get_attribute("value", "#input_number") == "3" + browser.clear("#input_number") + assert browser.get_attribute("value", "#input") == "" + + def test_copy_paste(browser): t = "copy and paste text" browser.send_keys(t, "#input")