Skip to content

Commit 04b2312

Browse files
committed
Add evaluate() to regular mode
1 parent 7e3e269 commit 04b2312

2 files changed

Lines changed: 41 additions & 0 deletions

File tree

help_docs/method_summary.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ self.load_html_string(html_string, new_page=True)
144144
self.set_content(html_string, new_page=False)
145145
self.load_html_file(html_file, new_page=True)
146146
self.open_html_file(html_file)
147+
self.evaluate(expression)
147148
self.execute_script(script, *args, **kwargs)
148149
self.execute_cdp_cmd(script, *args, **kwargs)
149150
self.execute_async_script(script, timeout=None)

seleniumbase/fixtures/base_case.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3446,6 +3446,46 @@ def open_html_file(self, html_file):
34463446
file_path = os.path.join(abs_path, html_file)
34473447
self.open("file://" + file_path)
34483448

3449+
def evaluate(self, expression):
3450+
"""Run a JavaScript expression and return the result."""
3451+
self.__check_scope()
3452+
if self.__is_cdp_swap_needed():
3453+
return self.cdp.evaluate(expression)
3454+
self._check_browser()
3455+
original_expression = expression
3456+
expression = expression.strip()
3457+
exp_list = expression.split("\n")
3458+
if exp_list and exp_list[-1].strip().startswith("return "):
3459+
expression = (
3460+
"\n".join(exp_list[0:-1]) + "\n"
3461+
+ exp_list[-1].strip()[len("return "):]
3462+
).strip()
3463+
evaluation = self.driver.execute_cdp_cmd(
3464+
"Runtime.evaluate",
3465+
{
3466+
"expression": expression
3467+
},
3468+
)
3469+
if "value" in evaluation["result"]:
3470+
return evaluation["result"]["value"]
3471+
elif evaluation["result"]["type"] == "undefined":
3472+
return None
3473+
elif "exceptionDetails" in evaluation:
3474+
raise Exception(evaluation["result"]["description"], expression)
3475+
elif evaluation["result"]["type"] == "object":
3476+
if "return " not in original_expression:
3477+
expression = "return " + original_expression.strip()
3478+
# Need to use execute_script() to return a WebDriver object.
3479+
# If this causes duplicate evaluation, don't use evaluate().
3480+
return self.execute_script(expression)
3481+
elif evaluation["result"]["type"] == "function":
3482+
return {} # This is what sb.cdp.evaluate returns
3483+
elif "description" in evaluation["result"]:
3484+
# At this point, the description is the exception
3485+
raise Exception(evaluation["result"]["description"], expression)
3486+
else: # Possibly an unhandled case if reached
3487+
return None
3488+
34493489
def execute_script(self, script, *args, **kwargs):
34503490
self.__check_scope()
34513491
if self.__is_cdp_swap_needed():

0 commit comments

Comments
 (0)