Skip to content

Commit ef9e67a

Browse files
committed
Add "fs" option to deferred asserts (failure screenshot)
1 parent afff9cb commit ef9e67a

File tree

2 files changed

+59
-30
lines changed

2 files changed

+59
-30
lines changed

help_docs/method_summary.md

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -740,25 +740,29 @@ self.check_window(
740740

741741
############
742742

743-
self.deferred_assert_element(selector, by=By.CSS_SELECTOR, timeout=None)
744-
# Duplicates: self.delayed_assert_element(selector, by=By.CSS_SELECTOR, timeout=None)
743+
self.deferred_assert_element(selector, by=By.CSS_SELECTOR, timeout=None, fs=False)
744+
# Duplicates:
745+
# self.delayed_assert_element(selector, by=By.CSS_SELECTOR, timeout=None, fs=False)
745746

746747
self.deferred_assert_text(
747-
text, selector="html", by=By.CSS_SELECTOR, timeout=None)
748+
text, selector="html", by=By.CSS_SELECTOR, timeout=None, fs=False)
748749
# Duplicates:
749-
# self.delayed_assert_text(text, selector="html", by=By.CSS_SELECTOR, timeout=None)
750+
# self.delayed_assert_text(
751+
# text, selector="html", by=By.CSS_SELECTOR, timeout=None, fs=False)
750752

751753
self.deferred_assert_exact_text(
752-
text, selector="html", by=By.CSS_SELECTOR, timeout=None)
754+
text, selector="html", by=By.CSS_SELECTOR, timeout=None, fs=False)
753755
# Duplicates:
754-
# self.delayed_assert_exact_text(text, selector="html", by=By.CSS_SELECTOR, timeout=None)
756+
# self.delayed_assert_exact_text(
757+
# text, selector="html", by=By.CSS_SELECTOR, timeout=None, fs=False)
755758

756759
self.deferred_check_window(
757-
name="default", level=0, baseline=False, check_domain=True, full_diff=False)
760+
name="default", level=0, baseline=False,
761+
check_domain=True, full_diff=False, fs=False)
758762
# Duplicates:
759-
# self.deferred_check_window(
760-
# name=name, level=level, baseline=baseline, check_domain=check_domain, full_diff=full_diff)
761-
763+
# self.delayed_check_window(
764+
# name="default", level=0, baseline=False,
765+
# check_domain=True, full_diff=False, fs=False)
762766
self.process_deferred_asserts(print_only=False)
763767
# Duplicates: self.process_delayed_asserts(print_only=False)
764768

seleniumbase/fixtures/base_case.py

Lines changed: 45 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10585,24 +10585,31 @@ def __get_exception_message(self):
1058510585
exc_message = sys.exc_info()
1058610586
return exc_message
1058710587

10588-
def __add_deferred_assert_failure(self):
10588+
def __add_deferred_assert_failure(self, fs=False):
1058910589
"""Add a deferred_assert failure to a list for future processing."""
1059010590
self.__check_scope()
1059110591
current_url = self.driver.current_url
1059210592
message = self.__get_exception_message()
10593+
count = self.__deferred_assert_count
1059310594
self.__deferred_assert_failures.append(
10594-
"CHECK #%s: (%s) %s\n"
10595-
% (self.__deferred_assert_count, current_url, message)
10595+
"DEFERRED ASSERT #%s: (%s) %s\n" % (count, current_url, message)
1059610596
)
10597+
if fs:
10598+
self.save_screenshot_to_logs(name="deferred_#%s" % count)
1059710599

1059810600
############
1059910601

1060010602
def deferred_assert_element(
10601-
self, selector, by=By.CSS_SELECTOR, timeout=None
10603+
self, selector, by=By.CSS_SELECTOR, timeout=None, fs=False
1060210604
):
1060310605
"""A non-terminating assertion for an element on a page.
1060410606
Failures will be saved until the process_deferred_asserts()
10605-
method is called from inside a test, likely at the end of it."""
10607+
method is called from inside a test, likely at the end of it.
10608+
If "fs" is set to True, a failure screenshot is saved to the
10609+
"latest_logs/" folder for that assertion failure. Otherwise,
10610+
only the last page screenshot is taken for all failures when
10611+
calling the process_deferred_asserts() method.
10612+
"""
1060610613
self.__check_scope()
1060710614
if not timeout:
1060810615
timeout = settings.MINI_TIMEOUT
@@ -10621,15 +10628,20 @@ def deferred_assert_element(
1062110628
self.wait_for_element_visible(selector, by=by, timeout=timeout)
1062210629
return True
1062310630
except Exception:
10624-
self.__add_deferred_assert_failure()
10631+
self.__add_deferred_assert_failure(fs=fs)
1062510632
return False
1062610633

1062710634
def deferred_assert_text(
10628-
self, text, selector="html", by=By.CSS_SELECTOR, timeout=None
10635+
self, text, selector="html", by=By.CSS_SELECTOR, timeout=None, fs=False
1062910636
):
1063010637
"""A non-terminating assertion for text from an element on a page.
1063110638
Failures will be saved until the process_deferred_asserts()
10632-
method is called from inside a test, likely at the end of it."""
10639+
method is called from inside a test, likely at the end of it.
10640+
If "fs" is set to True, a failure screenshot is saved to the
10641+
"latest_logs/" folder for that assertion failure. Otherwise,
10642+
only the last page screenshot is taken for all failures when
10643+
calling the process_deferred_asserts() method.
10644+
"""
1063310645
self.__check_scope()
1063410646
if not timeout:
1063510647
timeout = settings.MINI_TIMEOUT
@@ -10648,15 +10660,20 @@ def deferred_assert_text(
1064810660
self.wait_for_text_visible(text, selector, by=by, timeout=timeout)
1064910661
return True
1065010662
except Exception:
10651-
self.__add_deferred_assert_failure()
10663+
self.__add_deferred_assert_failure(fs=fs)
1065210664
return False
1065310665

1065410666
def deferred_assert_exact_text(
10655-
self, text, selector="html", by=By.CSS_SELECTOR, timeout=None
10667+
self, text, selector="html", by=By.CSS_SELECTOR, timeout=None, fs=False
1065610668
):
1065710669
"""A non-terminating assertion for exact text from an element.
1065810670
Failures will be saved until the process_deferred_asserts()
10659-
method is called from inside a test, likely at the end of it."""
10671+
method is called from inside a test, likely at the end of it.
10672+
If "fs" is set to True, a failure screenshot is saved to the
10673+
"latest_logs/" folder for that assertion failure. Otherwise,
10674+
only the last page screenshot is taken for all failures when
10675+
calling the process_deferred_asserts() method.
10676+
"""
1066010677
self.__check_scope()
1066110678
if not timeout:
1066210679
timeout = settings.MINI_TIMEOUT
@@ -10677,7 +10694,7 @@ def deferred_assert_exact_text(
1067710694
)
1067810695
return True
1067910696
except Exception:
10680-
self.__add_deferred_assert_failure()
10697+
self.__add_deferred_assert_failure(fs=fs)
1068110698
return False
1068210699

1068310700
def deferred_check_window(
@@ -10687,10 +10704,16 @@ def deferred_check_window(
1068710704
baseline=False,
1068810705
check_domain=True,
1068910706
full_diff=False,
10707+
fs=False,
1069010708
):
1069110709
"""A non-terminating assertion for the check_window() method.
1069210710
Failures will be saved until the process_deferred_asserts()
10693-
method is called from inside a test, likely at the end of it."""
10711+
method is called from inside a test, likely at the end of it.
10712+
If "fs" is set to True, a failure screenshot is saved to the
10713+
"latest_logs/" folder for that assertion failure. Otherwise,
10714+
only the last page screenshot is taken for all failures when
10715+
calling the process_deferred_asserts() method.
10716+
"""
1069410717
self.__check_scope()
1069510718
self.__deferred_assert_count += 1
1069610719
try:
@@ -10703,7 +10726,7 @@ def deferred_check_window(
1070310726
)
1070410727
return True
1070510728
except Exception:
10706-
self.__add_deferred_assert_failure()
10729+
self.__add_deferred_assert_failure(fs=fs)
1070710730
return False
1070810731

1070910732
def process_deferred_asserts(self, print_only=False):
@@ -10735,27 +10758,27 @@ def process_deferred_asserts(self, print_only=False):
1073510758
# Alternate naming scheme for the "deferred_assert" methods.
1073610759

1073710760
def delayed_assert_element(
10738-
self, selector, by=By.CSS_SELECTOR, timeout=None
10761+
self, selector, by=By.CSS_SELECTOR, timeout=None, fs=False
1073910762
):
1074010763
"""Same as self.deferred_assert_element()"""
1074110764
return self.deferred_assert_element(
10742-
selector=selector, by=by, timeout=timeout
10765+
selector=selector, by=by, timeout=timeout, fs=fs
1074310766
)
1074410767

1074510768
def delayed_assert_text(
10746-
self, text, selector="html", by=By.CSS_SELECTOR, timeout=None
10769+
self, text, selector="html", by=By.CSS_SELECTOR, timeout=None, fs=False
1074710770
):
1074810771
"""Same as self.deferred_assert_text()"""
1074910772
return self.deferred_assert_text(
10750-
text=text, selector=selector, by=by, timeout=timeout
10773+
text=text, selector=selector, by=by, timeout=timeout, fs=fs
1075110774
)
1075210775

1075310776
def delayed_assert_exact_text(
10754-
self, text, selector="html", by=By.CSS_SELECTOR, timeout=None
10777+
self, text, selector="html", by=By.CSS_SELECTOR, timeout=None, fs=False
1075510778
):
1075610779
"""Same as self.deferred_assert_exact_text()"""
1075710780
return self.deferred_assert_exact_text(
10758-
text=text, selector=selector, by=by, timeout=timeout
10781+
text=text, selector=selector, by=by, timeout=timeout, fs=fs
1075910782
)
1076010783

1076110784
def delayed_check_window(
@@ -10765,6 +10788,7 @@ def delayed_check_window(
1076510788
baseline=False,
1076610789
check_domain=True,
1076710790
full_diff=False,
10791+
fs=False,
1076810792
):
1076910793
"""Same as self.deferred_check_window()"""
1077010794
return self.deferred_check_window(
@@ -10773,6 +10797,7 @@ def delayed_check_window(
1077310797
baseline=baseline,
1077410798
check_domain=check_domain,
1077510799
full_diff=full_diff,
10800+
fs=fs,
1077610801
)
1077710802

1077810803
def process_delayed_asserts(self, print_only=False):

0 commit comments

Comments
 (0)