Skip to content

Commit 63cc177

Browse files
committed
Add / improve PDF methods
1 parent 7695bcb commit 63cc177

File tree

8 files changed

+72
-1
lines changed

8 files changed

+72
-1
lines changed

examples/cdp_mode/ReadMe.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -521,6 +521,7 @@ sb.cdp.scroll_up(amount=25)
521521
sb.cdp.scroll_down(amount=25)
522522
sb.cdp.save_screenshot(name, folder=None, selector=None)
523523
sb.cdp.print_to_pdf(name, folder=None)
524+
sb.cdp.save_as_pdf(name, folder=None)
524525
```
525526

526527
--------

help_docs/method_summary.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,7 @@ self.switch_to_driver(driver)
247247
self.switch_to_default_driver()
248248
self.save_screenshot(name, folder=None, selector=None, by="css selector")
249249
self.save_screenshot_to_logs(name=None, selector=None, by="css selector")
250+
self.save_as_pdf_to_logs(name=None)
250251
self.save_data_to_logs(data, file_name=None)
251252
self.append_data_to_logs(data, file_name=None)
252253
self.save_page_source(name, folder=None)
@@ -342,6 +343,8 @@ self.save_data_as(data, file_name, destination_folder=None)
342343
self.append_data_to_file(data, file_name, destination_folder=None)
343344
self.get_file_data(file_name, folder=None)
344345
self.print_to_pdf(name, folder=None)
346+
# Duplicates:
347+
# self.save_as_pdf(name, folder=None)
345348
self.get_downloads_folder()
346349
self.get_browser_downloads_folder()
347350
self.get_downloaded_files(regex=None, browser=False)

sbase/steps.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1191,6 +1191,15 @@ def set_attributes(context, selector, attribute, value):
11911191
sb.set_attributes(selector, attribute, value)
11921192

11931193

1194+
@step("Save as PDF to logs")
1195+
@step("Save as PDF to the logs")
1196+
@step("User saves page as PDF to logs")
1197+
@step("User saves page as PDF to the logs")
1198+
def save_as_pdf_to_logs(context):
1199+
sb = context.sb
1200+
sb.save_as_pdf_to_logs()
1201+
1202+
11941203
@step("Save page source to logs")
11951204
@step("Save the page source to the logs")
11961205
@step("User saves page source to logs")

seleniumbase/behave/behave_helper.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -522,6 +522,8 @@ def generate_gherkin(srt_actions):
522522
)
523523
elif action[0] == "ss_tl":
524524
sb_actions.append("Save screenshot to logs")
525+
elif action[0] == "pdftl":
526+
sb_actions.append("Save as PDF to logs")
525527
elif action[0] == "spstl":
526528
sb_actions.append("Save page source to logs")
527529
elif action[0] == "sh_fc":

seleniumbase/core/browser_launcher.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -865,6 +865,7 @@ def uc_open_with_cdp_mode(driver, url=None, **kwargs):
865865
cdp.scroll_down = CDPM.scroll_down
866866
cdp.save_screenshot = CDPM.save_screenshot
867867
cdp.print_to_pdf = CDPM.print_to_pdf
868+
cdp.save_as_pdf = CDPM.save_as_pdf
868869
cdp.page = page # async world
869870
cdp.driver = driver.cdp_base # async world
870871
cdp.tab = cdp.page # shortcut (original)

seleniumbase/core/recorder_helper.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -556,6 +556,9 @@ def generate_sbase_code(srt_actions):
556556
elif action[0] == "ss_tl":
557557
method = "save_screenshot_to_logs"
558558
sb_actions.append("self.%s()" % method)
559+
elif action[0] == "pdftl":
560+
method = "save_as_pdf_to_logs"
561+
sb_actions.append("self.%s()" % method)
559562
elif action[0] == "spstl":
560563
method = "save_page_source_to_logs"
561564
sb_actions.append("self.%s()" % method)

seleniumbase/core/sb_cdp.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2571,6 +2571,9 @@ def print_to_pdf(self, name, folder=None):
25712571
filename = os.path.join(folder, name)
25722572
self.loop.run_until_complete(self.page.print_to_pdf(filename))
25732573

2574+
def save_as_pdf(self, *args, **kwargs):
2575+
self.print_to_pdf(*args, **kwargs)
2576+
25742577

25752578
class Chrome(CDPMethods):
25762579
def __init__(self, url=None, **kwargs):

seleniumbase/fixtures/base_case.py

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ def __initialize_variables(self):
134134
self.__requests_timeout = None
135135
self.__page_source_count = 0
136136
self.__screenshot_count = 0
137+
self.__saved_pdf_count = 0
137138
self.__logs_data_count = 0
138139
self.__last_data_file = None
139140
self.__level_0_visual_f = False
@@ -4492,7 +4493,8 @@ def save_screenshot_to_logs(
44924493
If a provided selector is not found, then takes a full-page screenshot.
44934494
(The last_page / failure screenshot is always "screenshot.png")
44944495
The screenshot will be in PNG format."""
4495-
self.wait_for_ready_state_complete()
4496+
if not self.__is_cdp_swap_needed():
4497+
self.wait_for_ready_state_complete()
44964498
test_logpath = os.path.join(self.log_path, self.__get_test_id())
44974499
self.__create_log_path_as_needed(test_logpath)
44984500
if name:
@@ -4510,6 +4512,11 @@ def save_screenshot_to_logs(
45104512
if selector and by:
45114513
selector, by = self.__recalculate_selector(selector, by)
45124514
if page_actions.is_element_present(self.driver, selector, by):
4515+
if self.__is_cdp_swap_needed():
4516+
selector = self.convert_to_css_selector(selector, by=by)
4517+
return self.cdp.save_screenshot(
4518+
name, folder=test_logpath, selector=selector
4519+
)
45134520
return page_actions.save_screenshot(
45144521
self.driver, name, test_logpath, selector, by
45154522
)
@@ -4523,8 +4530,49 @@ def save_screenshot_to_logs(
45234530
action = ["ss_tl", "", origin, time_stamp]
45244531
self.__extra_actions.append(action)
45254532
sb_config._has_logs = True
4533+
if self.__is_cdp_swap_needed():
4534+
return self.cdp.save_screenshot(name, folder=test_logpath)
45264535
return page_actions.save_screenshot(self.driver, name, test_logpath)
45274536

4537+
def save_as_pdf(self, name, folder=None):
4538+
"""Same as self.print_to_pdf()"""
4539+
return self.print_to_pdf(name, folder=folder)
4540+
4541+
def save_as_pdf_to_logs(self, name=None):
4542+
"""Saves the page as a PDF to the "latest_logs/" folder.
4543+
Naming is automatic:
4544+
If NO NAME provided: "_1_PDF.pdf", "_2_PDF.pdf", etc.
4545+
If NAME IS provided, then: "_1_name.pdf", "_2_name.pdf", etc."""
4546+
if not self.__is_cdp_swap_needed():
4547+
self.wait_for_ready_state_complete()
4548+
test_logpath = os.path.join(self.log_path, self.__get_test_id())
4549+
self.__create_log_path_as_needed(test_logpath)
4550+
if name:
4551+
name = str(name)
4552+
self.__saved_pdf_count += 1
4553+
if not name or len(name) == 0:
4554+
name = "_%s_PDF.pdf" % self.__saved_pdf_count
4555+
else:
4556+
pre_name = "_%s_" % self.__saved_pdf_count
4557+
if len(name) >= 4 and name[-4:].lower() == ".pdf":
4558+
name = name[:-4]
4559+
if len(name) == 0:
4560+
name = "PDF"
4561+
name = "%s%s.pdf" % (pre_name, name)
4562+
if self.recorder_mode:
4563+
url = self.get_current_url()
4564+
if url and len(url) > 0:
4565+
if ("http:") in url or ("https:") in url or ("file:") in url:
4566+
if self.get_session_storage_item("pause_recorder") == "no":
4567+
time_stamp = self.execute_script("return Date.now();")
4568+
origin = self.get_origin()
4569+
action = ["pdftl", "", origin, time_stamp]
4570+
self.__extra_actions.append(action)
4571+
sb_config._has_logs = True
4572+
if self.__is_cdp_swap_needed():
4573+
return self.cdp.print_to_pdf(name, folder=test_logpath)
4574+
return self.print_to_pdf(name, test_logpath)
4575+
45284576
def save_page_source_to_logs(self, name=None):
45294577
"""Saves the page HTML to the "latest_logs/" folder.
45304578
Naming is automatic:
@@ -5517,6 +5565,7 @@ def __process_recorded_actions(self):
55175565
ext_actions.append("s_scr")
55185566
ext_actions.append("ss_tf")
55195567
ext_actions.append("ss_tl")
5568+
ext_actions.append("pdftl")
55205569
ext_actions.append("spstl")
55215570
ext_actions.append("da_el")
55225571
ext_actions.append("da_ep")

0 commit comments

Comments
 (0)