Skip to content

Commit e831d25

Browse files
committed
Handle a special case with Recorder Mode and iframes
1 parent 67460bf commit e831d25

File tree

1 file changed

+26
-0
lines changed

1 file changed

+26
-0
lines changed

seleniumbase/fixtures/base_case.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,9 @@ def __initialize_variables(self):
111111
self.__extra_actions = []
112112
self.__js_start_time = 0
113113
self.__set_c_from_switch = False
114+
self.__frame_switch_layer = 0 # Used by Recorder-Mode
115+
self.__frame_switch_multi = False # Used by Recorder-Mode
116+
self.__last_saved_url = None # Used by Recorder-Mode
114117
self.__called_setup = False
115118
self.__called_teardown = False
116119
self.__start_time_ms = None
@@ -3002,9 +3005,21 @@ def frame_switch(self, frame, timeout=None):
30023005
# Perform actions here that should be done within the iframe.
30033006
# The iframe is automatically exited after the "with" block ends.
30043007
"""
3008+
if self.recorder_mode:
3009+
self.__frame_switch_layer += 1
3010+
if self.__frame_switch_layer >= 2:
3011+
self.__frame_switch_multi = True
30053012
self.switch_to_frame(frame, timeout=timeout)
30063013
yield
30073014
self.switch_to_parent_frame()
3015+
if self.recorder_mode:
3016+
self.__frame_switch_layer -= 1
3017+
if self.__frame_switch_layer < 0:
3018+
self.__frame_switch_layer = 0
3019+
self.__frame_switch_multi = False
3020+
if self.__frame_switch_layer == 0 and self.__frame_switch_multi:
3021+
self.refresh()
3022+
self.__frame_switch_multi = False
30083023

30093024
def set_content_to_frame(self, frame, timeout=None):
30103025
"""Replaces the page html with an iframe's html from that page.
@@ -12337,11 +12352,22 @@ def __ad_block_as_needed(self):
1233712352
self.__last_page_load_url = current_url
1233812353

1233912354
def __disable_beforeunload_as_needed(self):
12355+
"""Disables beforeunload as needed. Also resets frame_switch state."""
1234012356
if (
1234112357
hasattr(self, "_disable_beforeunload")
1234212358
and self._disable_beforeunload
1234312359
):
1234412360
self.disable_beforeunload()
12361+
if self.recorder_mode:
12362+
try:
12363+
current_url = self.get_current_url
12364+
except Exception:
12365+
current_url = None
12366+
self.__last_saved_url = None
12367+
if current_url != self.__last_saved_url:
12368+
self.__frame_switch_layer = 0
12369+
self.__frame_switch_multi = False
12370+
self.__last_saved_url = current_url
1234512371

1234612372
############
1234712373

0 commit comments

Comments
 (0)