Skip to content

Commit 0e44e62

Browse files
committed
Make improvements to the "Deferred Assert" system
1 parent aac418d commit 0e44e62

File tree

1 file changed

+42
-5
lines changed

1 file changed

+42
-5
lines changed

seleniumbase/fixtures/base_case.py

Lines changed: 42 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9818,7 +9818,7 @@ def __add_deferred_assert_failure(self):
98189818
current_url = self.driver.current_url
98199819
message = self.__get_exception_message()
98209820
self.__deferred_assert_failures.append(
9821-
"CHECK #%s: (%s)\n %s"
9821+
"CHECK #%s: (%s) %s\n"
98229822
% (self.__deferred_assert_count, current_url, message)
98239823
)
98249824

@@ -9839,7 +9839,7 @@ def deferred_assert_element(
98399839
try:
98409840
url = self.get_current_url()
98419841
if url == self.__last_url_of_deferred_assert:
9842-
timeout = 1
9842+
timeout = 1 # Was already on page (full wait not needed)
98439843
else:
98449844
self.__last_url_of_deferred_assert = url
98459845
except Exception:
@@ -9866,7 +9866,7 @@ def deferred_assert_text(
98669866
try:
98679867
url = self.get_current_url()
98689868
if url == self.__last_url_of_deferred_assert:
9869-
timeout = 1
9869+
timeout = 1 # Was already on page (full wait not needed)
98709870
else:
98719871
self.__last_url_of_deferred_assert = url
98729872
except Exception:
@@ -9878,6 +9878,35 @@ def deferred_assert_text(
98789878
self.__add_deferred_assert_failure()
98799879
return False
98809880

9881+
def deferred_assert_exact_text(
9882+
self, text, selector="html", by=By.CSS_SELECTOR, timeout=None
9883+
):
9884+
"""A non-terminating assertion for exact text from an element.
9885+
Failures will be saved until the process_deferred_asserts()
9886+
method is called from inside a test, likely at the end of it."""
9887+
self.__check_scope()
9888+
if not timeout:
9889+
timeout = settings.MINI_TIMEOUT
9890+
if self.timeout_multiplier and timeout == settings.MINI_TIMEOUT:
9891+
timeout = self.__get_new_timeout(timeout)
9892+
self.__deferred_assert_count += 1
9893+
try:
9894+
url = self.get_current_url()
9895+
if url == self.__last_url_of_deferred_assert:
9896+
timeout = 1 # Was already on page (full wait not needed)
9897+
else:
9898+
self.__last_url_of_deferred_assert = url
9899+
except Exception:
9900+
pass
9901+
try:
9902+
self.wait_for_exact_text_visible(
9903+
text, selector, by=by, timeout=timeout
9904+
)
9905+
return True
9906+
except Exception:
9907+
self.__add_deferred_assert_failure()
9908+
return False
9909+
98819910
def deferred_check_window(
98829911
self,
98839912
name="default",
@@ -9917,8 +9946,8 @@ def process_deferred_asserts(self, print_only=False):
99179946
If "print_only" is set to True, the exception won't get raised."""
99189947
if self.__deferred_assert_failures:
99199948
exception_output = ""
9920-
exception_output += "\n*** DEFERRED ASSERTION FAILURES FROM: "
9921-
exception_output += "%s\n" % self.id()
9949+
exception_output += "\n***** DEFERRED ASSERTION FAILURES:\n"
9950+
exception_output += "TEST: %s\n\n" % self.id()
99229951
all_failing_checks = self.__deferred_assert_failures
99239952
self.__deferred_assert_failures = []
99249953
for tb in all_failing_checks:
@@ -9948,6 +9977,14 @@ def delayed_assert_text(
99489977
text=text, selector=selector, by=by, timeout=timeout
99499978
)
99509979

9980+
def delayed_assert_exact_text(
9981+
self, text, selector="html", by=By.CSS_SELECTOR, timeout=None
9982+
):
9983+
""" Same as self.deferred_assert_exact_text() """
9984+
return self.deferred_assert_exact_text(
9985+
text=text, selector=selector, by=by, timeout=timeout
9986+
)
9987+
99519988
def delayed_check_window(
99529989
self,
99539990
name="default",

0 commit comments

Comments
 (0)