Skip to content

Commit b5996f9

Browse files
committed
Better error handling of screenshot files
1 parent 3f4251a commit b5996f9

File tree

2 files changed

+34
-15
lines changed

2 files changed

+34
-15
lines changed

seleniumbase/fixtures/base_case.py

Lines changed: 32 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ def __init__(self, *args, **kwargs):
7070
self.__last_url_of_delayed_assert = "data:,"
7171
self.__last_page_load_url = "data:,"
7272
self.__last_page_screenshot = None
73+
self.__last_page_screenshot_png = None
7374
self.__delayed_assert_count = 0
7475
self.__delayed_assert_failures = []
7576
# Requires self._* instead of self.__* for external class use
@@ -3188,15 +3189,32 @@ def setUp(self, masterqa_mode=False):
31883189
self._default_driver = self.driver
31893190

31903191
def __set_last_page_screenshot(self):
3191-
if not self.__last_page_screenshot:
3192+
""" self.__last_page_screenshot is only for pytest html report logs
3193+
self.__last_page_screenshot_png is for all screenshot log files """
3194+
if not self.__last_page_screenshot and (
3195+
not self.__last_page_screenshot_png):
31923196
try:
31933197
element = self.driver.find_element_by_tag_name('body')
31943198
if self.is_pytest and self.report_on:
3199+
self.__last_page_screenshot_png = (
3200+
self.driver.get_screenshot_as_png())
31953201
self.__last_page_screenshot = element.screenshot_as_base64
31963202
else:
3197-
self.__last_page_screenshot = element.screenshot_as_png
3203+
self.__last_page_screenshot_png = element.screenshot_as_png
31983204
except Exception:
3199-
pass
3205+
if not self.__last_page_screenshot:
3206+
if self.is_pytest and self.report_on:
3207+
try:
3208+
self.__last_page_screenshot = (
3209+
self.driver.get_screenshot_as_base64())
3210+
except Exception:
3211+
pass
3212+
if not self.__last_page_screenshot_png:
3213+
try:
3214+
self.__last_page_screenshot_png = (
3215+
self.driver.get_screenshot_as_png())
3216+
except Exception:
3217+
pass
32003218

32013219
def __insert_test_result(self, state, err):
32023220
data_payload = TestcaseDataPayload()
@@ -3326,12 +3344,12 @@ def tearDown(self):
33263344
os.makedirs(test_logpath)
33273345
except Exception:
33283346
pass # Only reachable during multi-threaded runs
3329-
if not self.__last_page_screenshot:
3347+
if not self.__last_page_screenshot_png:
33303348
self.__set_last_page_screenshot()
33313349
log_helper.log_screenshot(
33323350
test_logpath,
33333351
self.driver,
3334-
self.__last_page_screenshot)
3352+
self.__last_page_screenshot_png)
33353353
self.__add_pytest_html_extra()
33363354
if self.with_testing_base and has_exception:
33373355
test_logpath = self.log_path + "/" + test_id
@@ -3344,23 +3362,23 @@ def tearDown(self):
33443362
not self.with_basic_test_info) and (
33453363
not self.with_page_source)):
33463364
# Log everything if nothing specified (if testing_base)
3347-
if not self.__last_page_screenshot:
3365+
if not self.__last_page_screenshot_png:
33483366
self.__set_last_page_screenshot()
33493367
log_helper.log_screenshot(
33503368
test_logpath,
33513369
self.driver,
3352-
self.__last_page_screenshot)
3370+
self.__last_page_screenshot_png)
33533371
log_helper.log_test_failure_data(
33543372
self, test_logpath, self.driver, self.browser)
33553373
log_helper.log_page_source(test_logpath, self.driver)
33563374
else:
33573375
if self.with_screen_shots:
3358-
if not self.__last_page_screenshot:
3376+
if not self.__last_page_screenshot_png:
33593377
self.__set_last_page_screenshot()
33603378
log_helper.log_screenshot(
33613379
test_logpath,
33623380
self.driver,
3363-
self.__last_page_screenshot)
3381+
self.__last_page_screenshot_png)
33643382
if self.with_basic_test_info:
33653383
log_helper.log_test_failure_data(
33663384
self, test_logpath, self.driver, self.browser)
@@ -3421,12 +3439,12 @@ def tearDown(self):
34213439
log_helper.log_test_failure_data(
34223440
self, test_logpath, self.driver, self.browser)
34233441
if len(self._drivers_list) > 0:
3424-
if not self.__last_page_screenshot:
3442+
if not self.__last_page_screenshot_png:
34253443
self.__set_last_page_screenshot()
34263444
log_helper.log_screenshot(
34273445
test_logpath,
34283446
self.driver,
3429-
self.__last_page_screenshot)
3447+
self.__last_page_screenshot_png)
34303448
log_helper.log_page_source(test_logpath, self.driver)
34313449
elif self.save_screenshot_after_test:
34323450
test_id = "%s.%s.%s" % (self.__class__.__module__,
@@ -3438,14 +3456,14 @@ def tearDown(self):
34383456
os.makedirs(test_logpath)
34393457
except Exception:
34403458
pass # Only reachable during multi-threaded runs
3441-
if not self.__last_page_screenshot:
3459+
if not self.__last_page_screenshot_png:
34423460
self.__set_last_page_screenshot()
34433461
log_helper.log_screenshot(
34443462
test_logpath,
34453463
self.driver,
3446-
self.__last_page_screenshot)
3464+
self.__last_page_screenshot_png)
34473465
if self.report_on:
3448-
self._last_page_screenshot = self.__last_page_screenshot
3466+
self._last_page_screenshot = self.__last_page_screenshot_png
34493467
try:
34503468
self._last_page_url = self.get_current_url()
34513469
except Exception:

seleniumbase/plugins/pytest_plugin.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,7 @@ def pytest_runtest_makereport(item, call):
270270
try:
271271
extra_report = item._testcase._html_report_extra
272272
extra = getattr(report, 'extra', [])
273-
report.extra = extra + extra_report
273+
if extra_report[1]["content"]:
274+
report.extra = extra + extra_report
274275
except Exception:
275276
pass

0 commit comments

Comments
 (0)