diff --git a/examples/cdp_mode/ReadMe.md b/examples/cdp_mode/ReadMe.md index 5627d1a1333..a21fb1857f2 100644 --- a/examples/cdp_mode/ReadMe.md +++ b/examples/cdp_mode/ReadMe.md @@ -411,6 +411,8 @@ sb.cdp.send_keys(selector, text, timeout=None) sb.cdp.press_keys(selector, text, timeout=None) sb.cdp.type(selector, text, timeout=None) sb.cdp.set_value(selector, text, timeout=None) +sb.cdp.clear_input(selector, timeout=None) +sb.cdp.clear(selector, timeout=None) sb.cdp.submit(selector) sb.cdp.evaluate(expression) sb.cdp.js_dumps(obj_name) diff --git a/mkdocs_build/requirements.txt b/mkdocs_build/requirements.txt index cc6148b3bae..3932532b83e 100644 --- a/mkdocs_build/requirements.txt +++ b/mkdocs_build/requirements.txt @@ -1,12 +1,12 @@ # mkdocs dependencies for generating the seleniumbase.io website # Minimum Python version: 3.9 (for generating docs only) -regex>=2024.11.6 -pymdown-extensions>=10.16 -pipdeptree>=2.27.0 +regex>=2025.7.34 +pymdown-extensions>=10.16.1 +pipdeptree>=2.28.0 python-dateutil>=2.8.2 Markdown==3.8.2 -click==8.2.1 +click==8.2.2 ghp-import==2.1.0 watchdog==6.0.0 cairocffi==1.7.1 @@ -14,7 +14,7 @@ pathspec==0.12.1 Babel==2.17.0 paginate==0.5.7 mkdocs==1.6.1 -mkdocs-material==9.6.15 +mkdocs-material==9.6.16 mkdocs-exclude-search==0.6.6 mkdocs-simple-hooks==0.1.5 mkdocs-material-extensions==1.3.1 diff --git a/requirements.txt b/requirements.txt index 22be263b4c3..6f645d43b2c 100755 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ pip>=25.0.1;python_version<"3.9" -pip>=25.1.1;python_version>="3.9" +pip>=25.2;python_version>="3.9" packaging>=25.0 setuptools~=70.2;python_version<"3.10" setuptools>=80.9.0;python_version>="3.10" @@ -71,13 +71,13 @@ pyotp==2.9.0 python-xlib==0.33;platform_system=="Linux" markdown-it-py==3.0.0 mdurl==0.1.2 -rich>=14.0.0,<15 +rich>=14.1.0,<15 # --- Testing Requirements --- # # ("pip install -r requirements.txt" also installs this, but "pip install -e ." won't.) coverage>=7.6.1;python_version<"3.9" -coverage>=7.9.2;python_version>="3.9" +coverage>=7.10.1;python_version>="3.9" pytest-cov>=5.0.0;python_version<"3.9" pytest-cov>=6.2.1;python_version>="3.9" flake8==5.0.4;python_version<"3.9" diff --git a/seleniumbase/__version__.py b/seleniumbase/__version__.py index 925dcfaf316..573f5dcecee 100755 --- a/seleniumbase/__version__.py +++ b/seleniumbase/__version__.py @@ -1,2 +1,2 @@ # seleniumbase package -__version__ = "4.40.6" +__version__ = "4.40.7" diff --git a/seleniumbase/core/browser_launcher.py b/seleniumbase/core/browser_launcher.py index 7621e8b2146..3e6fb456b86 100644 --- a/seleniumbase/core/browser_launcher.py +++ b/seleniumbase/core/browser_launcher.py @@ -742,6 +742,8 @@ def uc_open_with_cdp_mode(driver, url=None, **kwargs): cdp.send_keys = CDPM.send_keys cdp.press_keys = CDPM.press_keys cdp.type = CDPM.type + cdp.clear_input = CDPM.clear_input + cdp.clear = CDPM.clear_input cdp.set_value = CDPM.set_value cdp.submit = CDPM.submit cdp.evaluate = CDPM.evaluate diff --git a/seleniumbase/core/sb_cdp.py b/seleniumbase/core/sb_cdp.py index d4ccaac3b0d..f16d2e26f77 100644 --- a/seleniumbase/core/sb_cdp.py +++ b/seleniumbase/core/sb_cdp.py @@ -937,6 +937,16 @@ def type(self, selector, text, timeout=None): self.__slow_mode_pause_if_set() self.loop.run_until_complete(self.page.sleep(0.025)) + def clear_input(self, selector, timeout=None): + if not timeout: + timeout = settings.SMALL_TIMEOUT + self.__slow_mode_pause_if_set() + element = self.select(selector, timeout=timeout) + element.scroll_into_view() + element.clear_input() + self.__slow_mode_pause_if_set() + self.loop.run_until_complete(self.page.sleep(0.025)) + def set_value(self, selector, text, timeout=None): """Similar to send_keys(), but clears the text field first.""" if not timeout: diff --git a/seleniumbase/fixtures/base_case.py b/seleniumbase/fixtures/base_case.py index d9a44881820..8d69bc714a9 100644 --- a/seleniumbase/fixtures/base_case.py +++ b/seleniumbase/fixtures/base_case.py @@ -1194,6 +1194,9 @@ def clear(self, selector, by="css selector", timeout=None): if self.timeout_multiplier and timeout == settings.LARGE_TIMEOUT: timeout = self.__get_new_timeout(timeout) selector, by = self.__recalculate_selector(selector, by) + if self.__is_cdp_swap_needed(): + self.cdp.clear_input(selector) + return if self.__is_shadow_selector(selector): self.__shadow_clear(selector, timeout) return diff --git a/setup.py b/setup.py index eb1d49afce8..c834c212c60 100755 --- a/setup.py +++ b/setup.py @@ -147,7 +147,7 @@ python_requires=">=3.8", install_requires=[ 'pip>=25.0.1;python_version<"3.9"', - 'pip>=25.1.1;python_version>="3.9"', + 'pip>=25.2;python_version>="3.9"', 'packaging>=25.0', 'setuptools~=70.2;python_version<"3.10"', # Newer ones had issues 'setuptools>=80.9.0;python_version>="3.10"', @@ -219,7 +219,7 @@ 'python-xlib==0.33;platform_system=="Linux"', 'markdown-it-py==3.0.0', 'mdurl==0.1.2', - 'rich>=14.0.0,<15', + 'rich>=14.1.0,<15', ], extras_require={ # pip install -e .[allure] @@ -234,7 +234,7 @@ # Usage: coverage run -m pytest; coverage html; coverage report "coverage": [ 'coverage>=7.6.1;python_version<"3.9"', - 'coverage>=7.9.2;python_version>="3.9"', + 'coverage>=7.10.1;python_version>="3.9"', 'pytest-cov>=5.0.0;python_version<"3.9"', 'pytest-cov>=6.2.1;python_version>="3.9"', ],