Skip to content

Commit 60bed14

Browse files
committed
More efficient screenshots
1 parent 0eefbe0 commit 60bed14

File tree

2 files changed

+43
-9
lines changed

2 files changed

+43
-9
lines changed

seleniumbase/core/log_helper.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,15 @@
77
from seleniumbase.config import settings
88

99

10-
def log_screenshot(test_logpath, driver):
10+
def log_screenshot(test_logpath, driver, screenshot=None):
1111
screenshot_name = settings.SCREENSHOT_NAME
1212
screenshot_path = "%s/%s" % (test_logpath, screenshot_name)
1313
try:
14-
element = driver.find_element_by_tag_name('body')
15-
element_png = element.screenshot_as_png
14+
if not screenshot:
15+
element = driver.find_element_by_tag_name('body')
16+
screenshot = element.screenshot_as_png
1617
with open(screenshot_path, "wb") as file:
17-
file.write(element_png)
18+
file.write(screenshot)
1819
except Exception:
1920
try:
2021
driver.get_screenshot_as_file(screenshot_path)

seleniumbase/fixtures/base_case.py

Lines changed: 38 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ def __init__(self, *args, **kwargs):
7474
self.env = None # Add a shortened version of self.environment
7575
self.__last_url_of_delayed_assert = "data:,"
7676
self.__last_page_load_url = "data:,"
77+
self.__last_page_screenshot = None
7778
self.__delayed_assert_count = 0
7879
self.__delayed_assert_failures = []
7980
# Requires self._* instead of self.__* for external class use
@@ -3154,6 +3155,14 @@ def setUp(self, masterqa_mode=False):
31543155
disable_csp=self.disable_csp)
31553156
self._default_driver = self.driver
31563157

3158+
def __set_last_page_screenshot(self):
3159+
if not self.__last_page_screenshot:
3160+
try:
3161+
element = self.driver.find_element_by_tag_name('body')
3162+
self.__last_page_screenshot = element.screenshot_as_base64
3163+
except Exception:
3164+
pass
3165+
31573166
def __insert_test_result(self, state, err):
31583167
data_payload = TestcaseDataPayload()
31593168
data_payload.runtime = int(time.time() * 1000) - self.case_start_time
@@ -3273,7 +3282,12 @@ def tearDown(self):
32733282
os.makedirs(test_logpath)
32743283
except Exception:
32753284
pass # Only reachable during multi-threaded runs
3276-
log_helper.log_screenshot(test_logpath, self.driver)
3285+
if not self.__last_page_screenshot:
3286+
self.__set_last_page_screenshot()
3287+
log_helper.log_screenshot(
3288+
test_logpath,
3289+
self.driver,
3290+
self.__last_page_screenshot)
32773291
self.__add_pytest_html_extra()
32783292
if self.with_testing_base and has_exception:
32793293
test_logpath = self.log_path + "/" + test_id
@@ -3286,14 +3300,23 @@ def tearDown(self):
32863300
not self.with_basic_test_info) and (
32873301
not self.with_page_source)):
32883302
# Log everything if nothing specified (if testing_base)
3289-
log_helper.log_screenshot(test_logpath, self.driver)
3303+
if not self.__last_page_screenshot:
3304+
self.__set_last_page_screenshot()
3305+
log_helper.log_screenshot(
3306+
test_logpath,
3307+
self.driver,
3308+
self.__last_page_screenshot)
32903309
log_helper.log_test_failure_data(
32913310
self, test_logpath, self.driver, self.browser)
32923311
log_helper.log_page_source(test_logpath, self.driver)
32933312
else:
32943313
if self.with_screen_shots:
3314+
if not self.__last_page_screenshot:
3315+
self.__set_last_page_screenshot()
32953316
log_helper.log_screenshot(
3296-
test_logpath, self.driver)
3317+
test_logpath,
3318+
self.driver,
3319+
self.__last_page_screenshot)
32973320
if self.with_basic_test_info:
32983321
log_helper.log_test_failure_data(
32993322
self, test_logpath, self.driver, self.browser)
@@ -3354,7 +3377,12 @@ def tearDown(self):
33543377
log_helper.log_test_failure_data(
33553378
self, test_logpath, self.driver, self.browser)
33563379
if len(self._drivers_list) > 0:
3357-
log_helper.log_screenshot(test_logpath, self.driver)
3380+
if not self.__last_page_screenshot:
3381+
self.__set_last_page_screenshot()
3382+
log_helper.log_screenshot(
3383+
test_logpath,
3384+
self.driver,
3385+
self.__last_page_screenshot)
33583386
log_helper.log_page_source(test_logpath, self.driver)
33593387
elif self.save_screenshot_after_test:
33603388
test_id = "%s.%s.%s" % (self.__class__.__module__,
@@ -3366,6 +3394,11 @@ def tearDown(self):
33663394
os.makedirs(test_logpath)
33673395
except Exception:
33683396
pass # Only reachable during multi-threaded runs
3369-
log_helper.log_screenshot(test_logpath, self.driver)
3397+
if not self.__last_page_screenshot:
3398+
self.__set_last_page_screenshot()
3399+
log_helper.log_screenshot(
3400+
test_logpath,
3401+
self.driver,
3402+
self.__last_page_screenshot)
33703403
# Finally close all open browser windows
33713404
self.__quit_all_drivers()

0 commit comments

Comments
 (0)