@@ -10585,24 +10585,31 @@ def __get_exception_message(self):
10585
10585
exc_message = sys.exc_info()
10586
10586
return exc_message
10587
10587
10588
- def __add_deferred_assert_failure(self):
10588
+ def __add_deferred_assert_failure(self, fs=False ):
10589
10589
"""Add a deferred_assert failure to a list for future processing."""
10590
10590
self.__check_scope()
10591
10591
current_url = self.driver.current_url
10592
10592
message = self.__get_exception_message()
10593
+ count = self.__deferred_assert_count
10593
10594
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)
10596
10596
)
10597
+ if fs:
10598
+ self.save_screenshot_to_logs(name="deferred_#%s" % count)
10597
10599
10598
10600
############
10599
10601
10600
10602
def deferred_assert_element(
10601
- self, selector, by=By.CSS_SELECTOR, timeout=None
10603
+ self, selector, by=By.CSS_SELECTOR, timeout=None, fs=False
10602
10604
):
10603
10605
"""A non-terminating assertion for an element on a page.
10604
10606
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
+ """
10606
10613
self.__check_scope()
10607
10614
if not timeout:
10608
10615
timeout = settings.MINI_TIMEOUT
@@ -10621,15 +10628,20 @@ def deferred_assert_element(
10621
10628
self.wait_for_element_visible(selector, by=by, timeout=timeout)
10622
10629
return True
10623
10630
except Exception:
10624
- self.__add_deferred_assert_failure()
10631
+ self.__add_deferred_assert_failure(fs=fs )
10625
10632
return False
10626
10633
10627
10634
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
10629
10636
):
10630
10637
"""A non-terminating assertion for text from an element on a page.
10631
10638
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
+ """
10633
10645
self.__check_scope()
10634
10646
if not timeout:
10635
10647
timeout = settings.MINI_TIMEOUT
@@ -10648,15 +10660,20 @@ def deferred_assert_text(
10648
10660
self.wait_for_text_visible(text, selector, by=by, timeout=timeout)
10649
10661
return True
10650
10662
except Exception:
10651
- self.__add_deferred_assert_failure()
10663
+ self.__add_deferred_assert_failure(fs=fs )
10652
10664
return False
10653
10665
10654
10666
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
10656
10668
):
10657
10669
"""A non-terminating assertion for exact text from an element.
10658
10670
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
+ """
10660
10677
self.__check_scope()
10661
10678
if not timeout:
10662
10679
timeout = settings.MINI_TIMEOUT
@@ -10677,7 +10694,7 @@ def deferred_assert_exact_text(
10677
10694
)
10678
10695
return True
10679
10696
except Exception:
10680
- self.__add_deferred_assert_failure()
10697
+ self.__add_deferred_assert_failure(fs=fs )
10681
10698
return False
10682
10699
10683
10700
def deferred_check_window(
@@ -10687,10 +10704,16 @@ def deferred_check_window(
10687
10704
baseline=False,
10688
10705
check_domain=True,
10689
10706
full_diff=False,
10707
+ fs=False,
10690
10708
):
10691
10709
"""A non-terminating assertion for the check_window() method.
10692
10710
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
+ """
10694
10717
self.__check_scope()
10695
10718
self.__deferred_assert_count += 1
10696
10719
try:
@@ -10703,7 +10726,7 @@ def deferred_check_window(
10703
10726
)
10704
10727
return True
10705
10728
except Exception:
10706
- self.__add_deferred_assert_failure()
10729
+ self.__add_deferred_assert_failure(fs=fs )
10707
10730
return False
10708
10731
10709
10732
def process_deferred_asserts(self, print_only=False):
@@ -10735,27 +10758,27 @@ def process_deferred_asserts(self, print_only=False):
10735
10758
# Alternate naming scheme for the "deferred_assert" methods.
10736
10759
10737
10760
def delayed_assert_element(
10738
- self, selector, by=By.CSS_SELECTOR, timeout=None
10761
+ self, selector, by=By.CSS_SELECTOR, timeout=None, fs=False
10739
10762
):
10740
10763
"""Same as self.deferred_assert_element()"""
10741
10764
return self.deferred_assert_element(
10742
- selector=selector, by=by, timeout=timeout
10765
+ selector=selector, by=by, timeout=timeout, fs=fs
10743
10766
)
10744
10767
10745
10768
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
10747
10770
):
10748
10771
"""Same as self.deferred_assert_text()"""
10749
10772
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
10751
10774
)
10752
10775
10753
10776
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
10755
10778
):
10756
10779
"""Same as self.deferred_assert_exact_text()"""
10757
10780
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
10759
10782
)
10760
10783
10761
10784
def delayed_check_window(
@@ -10765,6 +10788,7 @@ def delayed_check_window(
10765
10788
baseline=False,
10766
10789
check_domain=True,
10767
10790
full_diff=False,
10791
+ fs=False,
10768
10792
):
10769
10793
"""Same as self.deferred_check_window()"""
10770
10794
return self.deferred_check_window(
@@ -10773,6 +10797,7 @@ def delayed_check_window(
10773
10797
baseline=baseline,
10774
10798
check_domain=check_domain,
10775
10799
full_diff=full_diff,
10800
+ fs=fs,
10776
10801
)
10777
10802
10778
10803
def process_delayed_asserts(self, print_only=False):
0 commit comments