diff --git a/help_docs/method_summary.md b/help_docs/method_summary.md index cc8607ef..8c28712d 100644 --- a/help_docs/method_summary.md +++ b/help_docs/method_summary.md @@ -781,6 +781,8 @@ self.find_link_text(link_text, timeout=None) # self.wait_for_link_text_visible(link_text, timeout=None) self.assert_link_text(link_text, timeout=None) +# Duplicates: +# self.assert_link(link_text, timeout=None) ############ diff --git a/seleniumbase/common/exceptions.py b/seleniumbase/common/exceptions.py index ae395ea9..0e10fb66 100644 --- a/seleniumbase/common/exceptions.py +++ b/seleniumbase/common/exceptions.py @@ -1,4 +1,5 @@ """ SeleniumBase Exceptions + LinkTextNotFoundException => Called when expected link text is not visible. NoSuchFileException => Called when self.assert_downloaded_file(...) fails. NoSuchOptionException => Called when select_option_by_*() lacks the option. NotConnectedException => Called when Internet is not reachable when needed. @@ -6,13 +7,17 @@ NotUsingChromiumException => Used by Chromium-only methods if not Chromium. OutOfScopeException => Used by BaseCase methods when setUp() is skipped. ProxyConnectionException => Called when the proxy connection failed. - TextNotVisibleException => Called when expected text fails to appear. + TextNotVisibleException => Called when the expected text is not visible. TimeLimitExceededException => Called when exceeding "--time-limit=SECONDS". TimeoutException => Called when some timeout limit has been exceeded. VisualException => Called when there's a Visual Diff Assertion Failure. """ +class LinkTextNotFoundException(Exception): + pass + + class NoSuchFileException(Exception): pass diff --git a/seleniumbase/fixtures/base_case.py b/seleniumbase/fixtures/base_case.py index bd920550..479b592c 100644 --- a/seleniumbase/fixtures/base_case.py +++ b/seleniumbase/fixtures/base_case.py @@ -1450,9 +1450,8 @@ class BaseCase(unittest.TestCase): else: return None if hard_fail: - raise Exception( - "Partial Link text {%s} was not found!" % link_text - ) + msg = "Partial Link text {%s} was not found!" % link_text + page_actions.timeout_exception("LinkTextNotFoundException", msg) else: return None @@ -8200,6 +8199,15 @@ class BaseCase(unittest.TestCase): original_selector=original_selector, ) + def assert_link(self, link_text, timeout=None): + """Same as self.assert_link_text()""" + self.__check_scope() + if not timeout: + timeout = settings.SMALL_TIMEOUT + if self.timeout_multiplier and timeout == settings.SMALL_TIMEOUT: + timeout = self.__get_new_timeout(timeout) + self.assert_link_text(link_text, timeout=timeout) + def assert_element_not_present( self, selector, by="css selector", timeout=None ): @@ -9009,11 +9017,11 @@ class BaseCase(unittest.TestCase): if now_ms >= stop_ms: break time.sleep(0.2) - message = "Link text {%s} was not present after %s seconds!" % ( + message = "Link text {%s} was not found after %s seconds!" % ( link_text, timeout, ) - page_actions.timeout_exception("NoSuchElementException", message) + page_actions.timeout_exception("LinkTextNotFoundException", message) def wait_for_partial_link_text_present(self, link_text, timeout=None): self.__check_scope() @@ -9035,10 +9043,10 @@ class BaseCase(unittest.TestCase): break time.sleep(0.2) message = ( - "Partial Link text {%s} was not present after %s seconds!" + "Partial Link text {%s} was not found after %s seconds!" "" % (link_text, timeout) ) - page_actions.timeout_exception("NoSuchElementException", message) + page_actions.timeout_exception("LinkTextNotFoundException", message) def wait_for_link_text_visible(self, link_text, timeout=None): self.__check_scope() @@ -13223,7 +13231,7 @@ class BaseCase(unittest.TestCase): text, selector, ) - page_actions.timeout_exception("ElementNotVisibleException", msg) + page_actions.timeout_exception("TextNotVisibleException", msg) return True def __wait_for_exact_shadow_text_visible(self, text, selector, timeout): @@ -13242,7 +13250,7 @@ class BaseCase(unittest.TestCase): "" % (text, selector) ) page_actions.timeout_exception( - "ElementNotVisibleException", msg + "TextNotVisibleException", msg ) return True except Exception: diff --git a/seleniumbase/fixtures/page_actions.py b/seleniumbase/fixtures/page_actions.py index ae1fb4e1..4adb4604 100644 --- a/seleniumbase/fixtures/page_actions.py +++ b/seleniumbase/fixtures/page_actions.py @@ -28,6 +28,7 @@ from selenium.common.exceptions import NoSuchElementException from selenium.common.exceptions import NoSuchWindowException from selenium.common.exceptions import StaleElementReferenceException from selenium.webdriver.common.action_chains import ActionChains +from seleniumbase.common.exceptions import LinkTextNotFoundException from seleniumbase.common.exceptions import TextNotVisibleException from seleniumbase.config import settings from seleniumbase.fixtures import shared_utils @@ -468,12 +469,12 @@ def wait_for_element_visible( ) timeout_exception(ElementNotVisibleException, message) elif not element and by == "link text": - message = "Link text {%s} was not visible after %s second%s!" % ( + message = "Link text {%s} was not found after %s second%s!" % ( selector, timeout, plural, ) - timeout_exception(ElementNotVisibleException, message) + timeout_exception(LinkTextNotFoundException, message) else: return element @@ -870,12 +871,12 @@ def wait_for_element_clickable( ) timeout_exception(ElementNotInteractableException, message) elif not element and by == "link text" and not is_visible: - message = "Link text {%s} was not visible after %s second%s!" % ( + message = "Link text {%s} was not found after %s second%s!" % ( selector, timeout, plural, ) - timeout_exception(ElementNotVisibleException, message) + timeout_exception(LinkTextNotFoundException, message) elif not element and by == "link text" and is_visible: message = "Link text {%s} was not clickable after %s second%s!" % ( selector, diff --git a/seleniumbase/fixtures/shared_utils.py b/seleniumbase/fixtures/shared_utils.py index 4f057c11..19ccfa19 100644 --- a/seleniumbase/fixtures/shared_utils.py +++ b/seleniumbase/fixtures/shared_utils.py @@ -71,6 +71,7 @@ def format_exc(exception, message): from selenium.common.exceptions import NoSuchElementException from selenium.common.exceptions import NoSuchFrameException from selenium.common.exceptions import NoSuchWindowException + from seleniumbase.common.exceptions import LinkTextNotFoundException from seleniumbase.common.exceptions import NoSuchFileException from seleniumbase.common.exceptions import NoSuchOptionException from seleniumbase.common.exceptions import TextNotVisibleException @@ -83,6 +84,10 @@ def format_exc(exception, message): exc = exceptions.ElementNotVisibleException elif exception == "ElementNotVisibleException": exc = exceptions.ElementNotVisibleException + elif exception == LinkTextNotFoundException: + exc = exceptions.LinkTextNotFoundException + elif exception == "LinkTextNotFoundException": + exc = exceptions.LinkTextNotFoundException elif exception == NoSuchElementException: exc = exceptions.NoSuchElementException elif exception == "NoSuchElementException":