@@ -445,6 +445,7 @@ def click(
445445 try:
446446 if self.driver.current_url != pre_action_url:
447447 self.__ad_block_as_needed()
448+ self.__disable_beforeunload_as_needed()
448449 except Exception:
449450 try:
450451 self.wait_for_ready_state_complete()
@@ -544,6 +545,7 @@ def double_click(self, selector, by="css selector", timeout=None):
544545 self.wait_for_angularjs(timeout=settings.MINI_TIMEOUT)
545546 if self.driver.current_url != pre_action_url:
546547 self.__ad_block_as_needed()
548+ self.__disable_beforeunload_as_needed()
547549 if self.demo_mode:
548550 if self.driver.current_url != pre_action_url:
549551 self.__demo_mode_pause_if_active()
@@ -1915,6 +1917,7 @@ def click_active_element(self):
19151917 self.wait_for_angularjs(timeout=settings.MINI_TIMEOUT)
19161918 if self.driver.current_url != pre_action_url:
19171919 self.__ad_block_as_needed()
1920+ self.__disable_beforeunload_as_needed()
19181921 if self.demo_mode:
19191922 if self.driver.current_url != pre_action_url:
19201923 self.__demo_mode_pause_if_active()
@@ -2505,6 +2508,9 @@ def __select_option(
25052508 else:
25062509 # A smaller subset of self.wait_for_ready_state_complete()
25072510 self.wait_for_angularjs(timeout=settings.MINI_TIMEOUT)
2511+ if self.driver.current_url != pre_action_url:
2512+ self.__ad_block_as_needed()
2513+ self.__disable_beforeunload_as_needed()
25082514 if self.demo_mode:
25092515 if self.driver.current_url != pre_action_url:
25102516 self.__demo_mode_pause_if_active()
@@ -3646,6 +3652,7 @@ def wait_for_ready_state_complete(self, timeout=None):
36463652 if self.js_checking_on:
36473653 self.assert_no_js_errors()
36483654 self.__ad_block_as_needed()
3655+ self.__disable_beforeunload_as_needed()
36493656 return True
36503657
36513658 def wait_for_angularjs(self, timeout=None, **kwargs):
@@ -5434,6 +5441,28 @@ def show_file_choosers(self):
54345441 action = ["sh_fc", "", origin, time_stamp]
54355442 self.__extra_actions.append(action)
54365443
5444+ def disable_beforeunload(self):
5445+ """This prevents: "Leave Site? Changes you made may not be saved."
5446+ on Chromium browsers (Chrome or Edge).
5447+ SB already sets "dom.disable_beforeunload" for Firefox options."""
5448+ self.__check_scope()
5449+ self.__check_browser()
5450+ if (
5451+ self.is_chromium()
5452+ and self.driver.current_url.startswith("http")
5453+ ):
5454+ try:
5455+ self.driver.execute_script("window.onbeforeunload=null;")
5456+ except Exception:
5457+ pass
5458+
5459+ def __disable_beforeunload_as_needed(self):
5460+ if (
5461+ hasattr(self, "_disable_beforeunload")
5462+ and self._disable_beforeunload
5463+ ):
5464+ self.disable_beforeunload()
5465+
54375466 def get_domain_url(self, url):
54385467 self.__check_scope()
54395468 return page_utils.get_domain_url(url)
@@ -12454,6 +12483,7 @@ def setUp(self, masterqa_mode=False):
1245412483 self._multithreaded = sb_config._multithreaded
1245512484 self._reuse_session = sb_config.reuse_session
1245612485 self._crumbs = sb_config.crumbs
12486+ self._disable_beforeunload = sb_config._disable_beforeunload
1245712487 self.dashboard = sb_config.dashboard
1245812488 self._dash_initialized = sb_config._dashboard_initialized
1245912489 if self.dashboard and self._multithreaded:
0 commit comments