Skip to content

Commit 8db3eb3

Browse files
committed
Add new CDP Mode methods
1 parent 747d6f6 commit 8db3eb3

File tree

4 files changed

+57
-0
lines changed

4 files changed

+57
-0
lines changed

examples/cdp_mode/ReadMe.md

+5
Original file line numberDiff line numberDiff line change
@@ -413,6 +413,7 @@ sb.cdp.send_keys(selector, text, timeout=None)
413413
sb.cdp.press_keys(selector, text, timeout=None)
414414
sb.cdp.type(selector, text, timeout=None)
415415
sb.cdp.set_value(selector, text, timeout=None)
416+
sb.cdp.submit(selector)
416417
sb.cdp.evaluate(expression)
417418
sb.cdp.js_dumps(obj_name)
418419
sb.cdp.maximize()
@@ -438,6 +439,8 @@ sb.cdp.get_page_source()
438439
sb.cdp.get_user_agent()
439440
sb.cdp.get_cookie_string()
440441
sb.cdp.get_locale_code()
442+
sb.cdp.get_local_storage_item(key)
443+
sb.cdp.get_session_storage_item(key)
441444
sb.cdp.get_screen_rect()
442445
sb.cdp.get_window_rect()
443446
sb.cdp.get_window_size()
@@ -454,6 +457,8 @@ sb.cdp.get_element_attribute(selector, attribute)
454457
sb.cdp.get_attribute(selector, attribute)
455458
sb.cdp.get_element_html(selector)
456459
sb.cdp.set_locale(locale)
460+
sb.cdp.set_local_storage_item(key, value)
461+
sb.cdp.set_session_storage_item(key, value)
457462
sb.cdp.set_attributes(selector, attribute, value)
458463
sb.cdp.gui_press_key(key)
459464
sb.cdp.gui_press_keys(keys)

seleniumbase/core/browser_launcher.py

+5
Original file line numberDiff line numberDiff line change
@@ -662,6 +662,7 @@ def uc_open_with_cdp_mode(driver, url=None):
662662
cdp.press_keys = CDPM.press_keys
663663
cdp.type = CDPM.type
664664
cdp.set_value = CDPM.set_value
665+
cdp.submit = CDPM.submit
665666
cdp.evaluate = CDPM.evaluate
666667
cdp.js_dumps = CDPM.js_dumps
667668
cdp.maximize = CDPM.maximize
@@ -670,6 +671,8 @@ def uc_open_with_cdp_mode(driver, url=None):
670671
cdp.set_window_rect = CDPM.set_window_rect
671672
cdp.reset_window_size = CDPM.reset_window_size
672673
cdp.set_locale = CDPM.set_locale
674+
cdp.set_local_storage_item = CDPM.set_local_storage_item
675+
cdp.set_session_storage_item = CDPM.set_session_storage_item
673676
cdp.set_attributes = CDPM.set_attributes
674677
cdp.gui_press_key = CDPM.gui_press_key
675678
cdp.gui_press_keys = CDPM.gui_press_keys
@@ -705,6 +708,8 @@ def uc_open_with_cdp_mode(driver, url=None):
705708
cdp.get_user_agent = CDPM.get_user_agent
706709
cdp.get_cookie_string = CDPM.get_cookie_string
707710
cdp.get_locale_code = CDPM.get_locale_code
711+
cdp.get_local_storage_item = CDPM.get_local_storage_item
712+
cdp.get_session_storage_item = CDPM.get_session_storage_item
708713
cdp.get_text = CDPM.get_text
709714
cdp.get_title = CDPM.get_title
710715
cdp.get_page_title = CDPM.get_title

seleniumbase/core/sb_cdp.py

+34
Original file line numberDiff line numberDiff line change
@@ -955,6 +955,20 @@ def set_value(self, selector, text, timeout=None):
955955
self.__slow_mode_pause_if_set()
956956
self.loop.run_until_complete(self.page.sleep(0.025))
957957

958+
def submit(self, selector):
959+
submit_script = (
960+
"""elm = document.querySelector('%s');
961+
const event = new KeyboardEvent("keydown", {
962+
key: "Enter",
963+
keyCode: 13,
964+
code: "Enter",
965+
which: 13,
966+
bubbles: true
967+
});
968+
elm.dispatchEvent(event);""" % selector
969+
)
970+
self.loop.run_until_complete(self.page.evaluate(submit_script))
971+
958972
def evaluate(self, expression):
959973
"""Run a JavaScript expression and return the result."""
960974
expression = expression.strip()
@@ -1115,6 +1129,16 @@ def get_locale_code(self):
11151129
self.page.evaluate("navigator.language || navigator.languages[0]")
11161130
)
11171131

1132+
def get_local_storage_item(self, key):
1133+
js_code = """localStorage.getItem('%s');""" % key
1134+
with suppress(Exception):
1135+
return self.loop.run_until_complete(self.page.evaluate(js_code))
1136+
1137+
def get_session_storage_item(self, key):
1138+
js_code = """sessionStorage.getItem('%s');""" % key
1139+
with suppress(Exception):
1140+
return self.loop.run_until_complete(self.page.evaluate(js_code))
1141+
11181142
def get_screen_rect(self):
11191143
coordinates = self.loop.run_until_complete(
11201144
self.page.js_dumps("window.screen")
@@ -1302,6 +1326,16 @@ def set_locale(self, locale):
13021326
"""(Settings will take effect on the next page load)"""
13031327
self.loop.run_until_complete(self.page.set_locale(locale))
13041328

1329+
def set_local_storage_item(self, key, value):
1330+
js_code = """localStorage.setItem('%s','%s');""" % (key, value)
1331+
with suppress(Exception):
1332+
self.loop.run_until_complete(self.page.evaluate(js_code))
1333+
1334+
def set_session_storage_item(self, key, value):
1335+
js_code = """sessionStorage.setItem('%s','%s');""" % (key, value)
1336+
with suppress(Exception):
1337+
self.loop.run_until_complete(self.page.evaluate(js_code))
1338+
13051339
def set_attributes(self, selector, attribute, value):
13061340
"""This method uses JavaScript to set/update a common attribute.
13071341
All matching selectors from querySelectorAll() are used.

seleniumbase/fixtures/base_case.py

+13
Original file line numberDiff line numberDiff line change
@@ -1164,6 +1164,9 @@ def submit(self, selector, by="css selector"):
11641164
"""Alternative to self.driver.find_element_by_*(SELECTOR).submit()"""
11651165
self.__check_scope()
11661166
selector, by = self.__recalculate_selector(selector, by)
1167+
if self.__is_cdp_swap_needed():
1168+
self.cdp.submit(selector)
1169+
return
11671170
element = self.wait_for_element_clickable(
11681171
selector, by=by, timeout=settings.SMALL_TIMEOUT
11691172
)
@@ -8800,6 +8803,9 @@ def set_local_storage_item(self, key, value):
88008803
self.__check_scope()
88018804
if not self.__is_valid_storage_url():
88028805
raise WebDriverException("Local Storage is not available here!")
8806+
if self.__is_cdp_swap_needed():
8807+
self.cdp.set_local_storage_item(key, value)
8808+
return
88038809
self.execute_script(
88048810
"window.localStorage.setItem('{}', '{}');".format(key, value)
88058811
)
@@ -8808,6 +8814,8 @@ def get_local_storage_item(self, key):
88088814
self.__check_scope()
88098815
if not self.__is_valid_storage_url():
88108816
raise WebDriverException("Local Storage is not available here!")
8817+
if self.__is_cdp_swap_needed():
8818+
return self.cdp.get_local_storage_item(key)
88118819
return self.execute_script(
88128820
"return window.localStorage.getItem('{}');".format(key)
88138821
)
@@ -8859,6 +8867,9 @@ def set_session_storage_item(self, key, value):
88598867
self.__check_scope()
88608868
if not self.__is_valid_storage_url():
88618869
raise WebDriverException("Session Storage is not available here!")
8870+
if self.__is_cdp_swap_needed():
8871+
self.cdp.set_session_storage_item(key, value)
8872+
return
88628873
self.execute_script(
88638874
"window.sessionStorage.setItem('{}', '{}');".format(key, value)
88648875
)
@@ -8867,6 +8878,8 @@ def get_session_storage_item(self, key):
88678878
self.__check_scope()
88688879
if not self.__is_valid_storage_url():
88698880
raise WebDriverException("Session Storage is not available here!")
8881+
if self.__is_cdp_swap_needed():
8882+
return self.cdp.get_session_storage_item(key)
88708883
return self.execute_script(
88718884
"return window.sessionStorage.getItem('{}');".format(key)
88728885
)

0 commit comments

Comments
 (0)