Skip to content

Commit 3d39746

Browse files
committed
Update CDP Mode
1 parent d8d02cd commit 3d39746

File tree

7 files changed

+98
-9
lines changed

7 files changed

+98
-9
lines changed

help_docs/method_summary.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,8 @@ self.get_gui_element_rect(selector, by="css selector")
231231

232232
self.get_gui_element_center(selector, by="css selector")
233233

234+
self.get_screen_rect()
235+
234236
self.get_window_rect()
235237

236238
self.get_window_size()
@@ -245,6 +247,10 @@ self.set_window_position(x, y)
245247

246248
self.maximize_window()
247249

250+
self.minimize_window()
251+
252+
self.reset_window_size()
253+
248254
self.switch_to_frame(frame="iframe", timeout=None)
249255

250256
self.switch_to_default_content()

seleniumbase/core/browser_launcher.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,8 +216,10 @@ def extend_driver(driver):
216216
driver.get_text = DM.get_text
217217
driver.get_active_element_css = DM.get_active_element_css
218218
driver.get_locale_code = DM.get_locale_code
219+
driver.get_screen_rect = DM.get_screen_rect
219220
driver.get_origin = DM.get_origin
220221
driver.get_user_agent = DM.get_user_agent
222+
driver.get_cookie_string = DM.get_cookie_string
221223
driver.highlight = DM.highlight
222224
driver.highlight_click = DM.highlight_click
223225
driver.highlight_if_visible = DM.highlight_if_visible
@@ -234,6 +236,7 @@ def extend_driver(driver):
234236
driver.switch_to_window = DM.switch_to_window
235237
driver.switch_to_tab = DM.switch_to_tab
236238
driver.switch_to_frame = DM.switch_to_frame
239+
driver.reset_window_size = DM.reset_window_size
237240
if hasattr(driver, "proxy"):
238241
driver.set_wire_proxy = DM.set_wire_proxy
239242
return driver

seleniumbase/core/sb_cdp.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -551,7 +551,7 @@ def click_visible_elements(self, selector, limit=0):
551551
if (width != 0 or height != 0):
552552
element.click()
553553
click_count += 1
554-
time.sleep(0.042)
554+
time.sleep(0.044)
555555
self.__slow_mode_pause_if_set()
556556
self.loop.run_until_complete(self.page.wait())
557557
except Exception:
@@ -668,10 +668,10 @@ def press_keys(self, selector, text, timeout=settings.SMALL_TIMEOUT):
668668
text = text[:-1]
669669
for key in text:
670670
element.send_keys(key)
671-
time.sleep(0.042)
671+
time.sleep(0.044)
672672
if submit:
673673
element.send_keys("\r\n")
674-
time.sleep(0.042)
674+
time.sleep(0.044)
675675
self.__slow_mode_pause_if_set()
676676
self.loop.run_until_complete(self.page.wait())
677677

@@ -741,7 +741,7 @@ def maximize(self):
741741
return
742742
elif self.get_window()[1].window_state.value == "minimized":
743743
self.loop.run_until_complete(self.page.maximize())
744-
time.sleep(0.042)
744+
time.sleep(0.044)
745745
return self.loop.run_until_complete(self.page.maximize())
746746

747747
def minimize(self):
@@ -751,7 +751,7 @@ def minimize(self):
751751
def medimize(self):
752752
if self.get_window()[1].window_state.value == "minimized":
753753
self.loop.run_until_complete(self.page.medimize())
754-
time.sleep(0.042)
754+
time.sleep(0.044)
755755
return self.loop.run_until_complete(self.page.medimize())
756756

757757
def set_window_rect(self, x, y, width, height):
@@ -760,7 +760,7 @@ def set_window_rect(self, x, y, width, height):
760760
self.page.set_window_size(
761761
left=x, top=y, width=width, height=height)
762762
)
763-
time.sleep(0.042)
763+
time.sleep(0.044)
764764
return self.loop.run_until_complete(
765765
self.page.set_window_size(
766766
left=x, top=y, width=width, height=height)
@@ -1125,7 +1125,7 @@ def gui_press_key(self, key):
11251125
)
11261126
with gui_lock:
11271127
pyautogui.press(key)
1128-
time.sleep(0.042)
1128+
time.sleep(0.044)
11291129
self.__slow_mode_pause_if_set()
11301130
self.loop.run_until_complete(self.page.wait())
11311131

@@ -1139,7 +1139,7 @@ def gui_press_keys(self, keys):
11391139
with gui_lock:
11401140
for key in keys:
11411141
pyautogui.press(key)
1142-
time.sleep(0.042)
1142+
time.sleep(0.044)
11431143
self.__slow_mode_pause_if_set()
11441144
self.loop.run_until_complete(self.page.wait())
11451145

seleniumbase/core/sb_driver.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
"""Add new methods to extend the driver"""
22
from contextlib import suppress
33
from selenium.webdriver.remote.webelement import WebElement
4+
from seleniumbase.config import settings
45
from seleniumbase.fixtures import js_utils
56
from seleniumbase.fixtures import page_actions
67
from seleniumbase.fixtures import page_utils
@@ -189,6 +190,8 @@ def is_alert_present(self):
189190
return False
190191

191192
def is_online(self):
193+
if self.__is_cdp_swap_needed():
194+
return self.driver.cdp.evaluate("navigator.onLine;")
192195
return self.driver.execute_script("return navigator.onLine;")
193196

194197
def is_connected(self):
@@ -231,17 +234,35 @@ def get_text(self, *args, **kwargs):
231234
return page_actions.get_text(self.driver, *args, **kwargs)
232235

233236
def get_active_element_css(self, *args, **kwargs):
237+
if self.__is_cdp_swap_needed():
238+
return self.driver.cdp.get_active_element_css()
234239
return js_utils.get_active_element_css(self.driver, *args, **kwargs)
235240

236241
def get_locale_code(self, *args, **kwargs):
242+
if self.__is_cdp_swap_needed():
243+
return self.driver.cdp.get_locale_code()
237244
return js_utils.get_locale_code(self.driver, *args, **kwargs)
238245

246+
def get_screen_rect(self, *args, **kwargs):
247+
if self.__is_cdp_swap_needed():
248+
return self.driver.cdp.get_screen_rect()
249+
return js_utils.get_screen_rect(self.driver, *args, **kwargs)
250+
239251
def get_origin(self, *args, **kwargs):
252+
if self.__is_cdp_swap_needed():
253+
return self.driver.cdp.get_origin()
240254
return js_utils.get_origin(self.driver, *args, **kwargs)
241255

242256
def get_user_agent(self, *args, **kwargs):
257+
if self.__is_cdp_swap_needed():
258+
return self.driver.cdp.get_user_agent()
243259
return js_utils.get_user_agent(self.driver, *args, **kwargs)
244260

261+
def get_cookie_string(self, *args, **kwargs):
262+
if self.__is_cdp_swap_needed():
263+
return self.driver.cdp.get_cookie_string()
264+
return js_utils.get_cookie_string(self.driver, *args, **kwargs)
265+
245266
def highlight(self, *args, **kwargs):
246267
if self.__is_cdp_swap_needed():
247268
selector = None
@@ -312,6 +333,16 @@ def switch_to_frame(self, frame="iframe"):
312333
iframe = self.locator(frame)
313334
self.driver.switch_to.frame(iframe)
314335

336+
def reset_window_size(self):
337+
if self.__is_cdp_swap_needed():
338+
self.driver.cdp.reset_window_size()
339+
return
340+
x = settings.WINDOW_START_X
341+
y = settings.WINDOW_START_Y
342+
width = settings.CHROME_START_WIDTH
343+
height = settings.CHROME_START_HEIGHT
344+
self.driver.set_window_rect(x, y, width, height)
345+
315346
def set_wire_proxy(self, string):
316347
"""Set a proxy server for selenium-wire mode ("--wire")
317348
Examples: (ONLY avilable if using selenium-wire mode!)

seleniumbase/fixtures/base_case.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3452,6 +3452,13 @@ def get_gui_element_center(self, selector, by="css selector"):
34523452
y = element_rect["y"] + (element_rect["height"] / 2.0) + 0.5
34533453
return (x, y)
34543454

3455+
def get_screen_rect(self):
3456+
self.__check_scope()
3457+
if self.__is_cdp_swap_needed():
3458+
return self.cdp.get_screen_rect()
3459+
self._check_browser()
3460+
return self.driver.get_screen_rect()
3461+
34553462
def get_window_rect(self):
34563463
self.__check_scope()
34573464
if self.__is_cdp_swap_needed():
@@ -3475,6 +3482,9 @@ def get_window_position(self):
34753482

34763483
def set_window_rect(self, x, y, width, height):
34773484
self.__check_scope()
3485+
if self.__is_cdp_swap_needed():
3486+
self.cdp.set_window_rect(x, y, width, height)
3487+
return
34783488
self._check_browser()
34793489
self.driver.set_window_rect(x, y, width, height)
34803490
self.__demo_mode_pause_if_active(tiny=True)
@@ -3493,10 +3503,35 @@ def set_window_position(self, x, y):
34933503

34943504
def maximize_window(self):
34953505
self.__check_scope()
3506+
if self.__is_cdp_swap_needed():
3507+
self.cdp.maximize()
3508+
return
34963509
self._check_browser()
34973510
self.driver.maximize_window()
34983511
self.__demo_mode_pause_if_active(tiny=True)
34993512

3513+
def minimize_window(self):
3514+
self.__check_scope()
3515+
if self.__is_cdp_swap_needed():
3516+
self.cdp.minimize()
3517+
return
3518+
self._check_browser()
3519+
self.driver.minimize_window()
3520+
self.__demo_mode_pause_if_active(tiny=True)
3521+
3522+
def reset_window_size(self):
3523+
self.__check_scope()
3524+
if self.__is_cdp_swap_needed():
3525+
self.cdp.reset_window_size()
3526+
return
3527+
self._check_browser()
3528+
x = settings.WINDOW_START_X
3529+
y = settings.WINDOW_START_Y
3530+
width = settings.CHROME_START_WIDTH
3531+
height = settings.CHROME_START_HEIGHT
3532+
self.set_window_rect(x, y, width, height)
3533+
self.__demo_mode_pause_if_active(tiny=True)
3534+
35003535
def switch_to_frame(self, frame="iframe", timeout=None):
35013536
"""Wait for an iframe to appear, and switch to it. This should be
35023537
usable as a drop-in replacement for driver.switch_to.frame().

seleniumbase/fixtures/js_utils.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1188,6 +1188,10 @@ def get_locale_code(driver):
11881188
return driver.execute_script(script)
11891189

11901190

1191+
def get_screen_rect(driver):
1192+
return driver.execute_script("return window.screen;")
1193+
1194+
11911195
def get_origin(driver):
11921196
return driver.execute_script("return window.location.origin;")
11931197

@@ -1196,6 +1200,10 @@ def get_user_agent(driver):
11961200
return driver.execute_script("return navigator.userAgent;")
11971201

11981202

1203+
def get_cookie_string(driver):
1204+
return driver.execute_script("return document.cookie;")
1205+
1206+
11991207
def get_scroll_distance_to_element(driver, element):
12001208
try:
12011209
scroll_position = driver.execute_script("return window.scrollY;")

seleniumbase/plugins/sb_manager.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -275,12 +275,15 @@ def SB(
275275
collect_only = ("--co" in sys_argv or "--collect-only" in sys_argv)
276276
all_scripts = (hasattr(sb_config, "all_scripts") and sb_config.all_scripts)
277277
do_log_folder_setup = False # The first "test=True" run does it
278+
inner_test = False
278279
if (
279280
(hasattr(sb_config, "is_behave") and sb_config.is_behave)
280281
or (hasattr(sb_config, "is_pytest") and sb_config.is_pytest)
281282
or (hasattr(sb_config, "is_nosetest") and sb_config.is_nosetest)
282283
):
283284
existing_runner = True
285+
if test:
286+
inner_test = True
284287
test = False # Already using a test runner. Skip extra test steps.
285288
elif test is None and "--test" in sys_argv:
286289
test = True
@@ -1222,7 +1225,10 @@ def SB(
12221225
sb._has_failure = True
12231226
exception = e
12241227
test_passed = False
1225-
if not test_name:
1228+
if (test or inner_test) and not test_name:
1229+
print(e)
1230+
return
1231+
elif not test_name:
12261232
raise
12271233
else:
12281234
the_traceback = traceback.format_exc().strip()

0 commit comments

Comments
 (0)