diff --git a/examples/cdp_mode/ReadMe.md b/examples/cdp_mode/ReadMe.md index cf19aa67ce4..a4b14841ca5 100644 --- a/examples/cdp_mode/ReadMe.md +++ b/examples/cdp_mode/ReadMe.md @@ -75,6 +75,7 @@ with SB(uc=True, test=True) as sb: sb.activate_cdp_mode(url) sb.sleep(2) sb.cdp.gui_click_element("#turnstile-widget div") + sb.wait_for_element_absent("input[disabled]") sb.sleep(2) ``` diff --git a/examples/cdp_mode/raw_driver.py b/examples/cdp_mode/raw_driver.py index 2fc382f728d..4fe1c17f481 100644 --- a/examples/cdp_mode/raw_driver.py +++ b/examples/cdp_mode/raw_driver.py @@ -7,4 +7,5 @@ driver.uc_activate_cdp_mode(url) driver.sleep(1) driver.uc_gui_click_captcha() +driver.wait_for_element_absent("input[disabled]") driver.sleep(2) diff --git a/examples/cdp_mode/raw_planetmc.py b/examples/cdp_mode/raw_planetmc.py index f45d1230649..53ea4020dc0 100644 --- a/examples/cdp_mode/raw_planetmc.py +++ b/examples/cdp_mode/raw_planetmc.py @@ -5,4 +5,5 @@ sb.activate_cdp_mode(url) sb.sleep(2) sb.uc_gui_click_captcha() + sb.wait_for_element_absent("input[disabled]") sb.sleep(2) diff --git a/help_docs/syntax_formats.md b/help_docs/syntax_formats.md index aca1e7251c3..6b2ff5abc97 100644 --- a/help_docs/syntax_formats.md +++ b/help_docs/syntax_formats.md @@ -896,7 +896,8 @@ with SB(uc=True, test=True) as sb: url = "www.planetminecraft.com/account/sign_in/" sb.activate_cdp_mode(url) sb.sleep(2) - sb.cdp.gui_click_element("#turnstile-widget div") + sb.uc_gui_click_captcha() + sb.wait_for_element_absent("input[disabled]") sb.sleep(2) ``` diff --git a/seleniumbase/__version__.py b/seleniumbase/__version__.py index 2ef3ef4e112..8abed862c5a 100755 --- a/seleniumbase/__version__.py +++ b/seleniumbase/__version__.py @@ -1,2 +1,2 @@ # seleniumbase package -__version__ = "4.41.11" +__version__ = "4.41.12" diff --git a/seleniumbase/core/browser_launcher.py b/seleniumbase/core/browser_launcher.py index 92917b1cd99..4a01222d6a0 100644 --- a/seleniumbase/core/browser_launcher.py +++ b/seleniumbase/core/browser_launcher.py @@ -228,6 +228,8 @@ def extend_driver( driver.wait_for_element = DM.wait_for_element driver.wait_for_element_visible = DM.wait_for_element_visible driver.wait_for_element_present = DM.wait_for_element_present + driver.wait_for_element_absent = DM.wait_for_element_absent + driver.wait_for_element_not_visible = DM.wait_for_element_not_visible driver.wait_for_selector = DM.wait_for_selector driver.wait_for_text = DM.wait_for_text driver.wait_for_exact_text = DM.wait_for_exact_text diff --git a/seleniumbase/core/sb_driver.py b/seleniumbase/core/sb_driver.py index 27b1cfa3ac4..2f6a1df4423 100644 --- a/seleniumbase/core/sb_driver.py +++ b/seleniumbase/core/sb_driver.py @@ -137,6 +137,16 @@ def wait_for_element_visible(self, *args, **kwargs): def wait_for_element_present(self, *args, **kwargs): return page_actions.wait_for_selector(self.driver, *args, **kwargs) + def wait_for_element_absent(self, *args, **kwargs): + return page_actions.wait_for_element_absent( + self.driver, *args, **kwargs + ) + + def wait_for_element_not_visible(self, *args, **kwargs): + return page_actions.wait_for_element_not_visible( + self.driver, *args, **kwargs + ) + def wait_for_selector(self, *args, **kwargs): return page_actions.wait_for_selector(self.driver, *args, **kwargs) diff --git a/seleniumbase/fixtures/page_actions.py b/seleniumbase/fixtures/page_actions.py index c0febe70a70..a1c28c17ef8 100644 --- a/seleniumbase/fixtures/page_actions.py +++ b/seleniumbase/fixtures/page_actions.py @@ -1108,6 +1108,14 @@ def wait_for_element_absent( timeout - the time to wait for elements in seconds original_selector - handle pre-converted ":contains(TEXT)" selector """ + if __is_cdp_swap_needed(driver): + if page_utils.is_valid_by(by): + original_selector = selector + elif page_utils.is_valid_by(selector): + original_selector = by + selector, by = page_utils.recalculate_selector(original_selector, by) + driver.cdp.wait_for_element_absent(selector) + return True _reconnect_if_disconnected(driver) start_ms = time.time() * 1000.0 stop_ms = start_ms + (timeout * 1000.0) @@ -1156,6 +1164,14 @@ def wait_for_element_not_visible( timeout - the time to wait for the element in seconds original_selector - handle pre-converted ":contains(TEXT)" selector """ + if __is_cdp_swap_needed(driver): + if page_utils.is_valid_by(by): + original_selector = selector + elif page_utils.is_valid_by(selector): + original_selector = by + selector, by = page_utils.recalculate_selector(original_selector, by) + driver.cdp.wait_for_element_not_visible(selector) + return True _reconnect_if_disconnected(driver) start_ms = time.time() * 1000.0 stop_ms = start_ms + (timeout * 1000.0)