diff options
author | sotech117 <michael_foiani@brown.edu> | 2025-07-31 17:27:24 -0400 |
---|---|---|
committer | sotech117 <michael_foiani@brown.edu> | 2025-07-31 17:27:24 -0400 |
commit | 5bf22fc7e3c392c8bd44315ca2d06d7dca7d084e (patch) | |
tree | 8dacb0f195df1c0788d36dd0064f6bbaa3143ede /venv/lib/python3.8/site-packages/dash/testing/wait.py | |
parent | b832d364da8c2efe09e3f75828caf73c50d01ce3 (diff) |
add code for analysis of data
Diffstat (limited to 'venv/lib/python3.8/site-packages/dash/testing/wait.py')
-rw-r--r-- | venv/lib/python3.8/site-packages/dash/testing/wait.py | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/venv/lib/python3.8/site-packages/dash/testing/wait.py b/venv/lib/python3.8/site-packages/dash/testing/wait.py new file mode 100644 index 0000000..d9bd8b0 --- /dev/null +++ b/venv/lib/python3.8/site-packages/dash/testing/wait.py @@ -0,0 +1,161 @@ +# pylint: disable=too-few-public-methods +"""Utils methods for pytest-dash such wait_for wrappers.""" + +import time +import logging +from selenium.common.exceptions import WebDriverException +from selenium.webdriver.common.by import By +from dash.testing.errors import TestingTimeoutError + + +logger = logging.getLogger(__name__) + + +def until( + wait_cond, timeout, poll=0.1, msg="expected condition not met within timeout" +): # noqa: C0330 + res = wait_cond() + logger.debug( + "start wait.until with method, timeout, poll => %s %s %s", + wait_cond, + timeout, + poll, + ) + end_time = time.time() + timeout + while not res: + if time.time() > end_time: + raise TestingTimeoutError(msg) + time.sleep(poll) + res = wait_cond() + logger.debug("poll => %s", time.time()) + + return res + + +def until_not( + wait_cond, timeout, poll=0.1, msg="expected condition met within timeout" +): # noqa: C0330 + res = wait_cond() + logger.debug( + "start wait.until_not method, timeout, poll => %s %s %s", + wait_cond, + timeout, + poll, + ) + end_time = time.time() + timeout + while res: + if time.time() > end_time: + raise TestingTimeoutError(msg) + time.sleep(poll) + res = wait_cond() + logger.debug("poll => %s", time.time()) + + return res + + +class contains_text: + def __init__(self, selector, text, timeout): + self.selector = selector + self.text = text + self.timeout = timeout + + def __call__(self, driver): + try: + elem = driver.find_element(By.CSS_SELECTOR, self.selector) + logger.debug("contains text {%s} => expected %s", elem.text, self.text) + value = elem.get_attribute("value") + return self.text in str(elem.text) or ( + value is not None and self.text in str(value) + ) + except WebDriverException: + return False + + def message(self, driver): + try: + element = self._get_element(driver) + text = "found: " + str(element.text) or str(element.get_attribute("value")) + except WebDriverException: + text = f"{self.selector} not found" + return f"text -> {self.text} not found inside element within {self.timeout}s, {text}" + + def _get_element(self, driver): + return driver.find_element(By.CSS_SELECTOR, self.selector) + + +class contains_class: + def __init__(self, selector, classname): + self.selector = selector + self.classname = classname + + def __call__(self, driver): + try: + elem = driver.find_element(By.CSS_SELECTOR, self.selector) + classname = elem.get_attribute("class") + logger.debug( + "contains class {%s} => expected %s", classname, self.classname + ) + return self.classname in str(classname).split(" ") + except WebDriverException: + return False + + +class text_to_equal: + def __init__(self, selector, text, timeout): + self.selector = selector + self.text = text + self.timeout = timeout + + def __call__(self, driver): + try: + elem = self._get_element(driver) + logger.debug("text to equal {%s} => expected %s", elem.text, self.text) + value = elem.get_attribute("value") + return str(elem.text) == self.text or ( + value is not None and str(value) == self.text + ) + except WebDriverException: + return False + + def message(self, driver): + try: + element = self._get_element(driver) + text = "found: " + str(element.text) or str(element.get_attribute("value")) + except WebDriverException: + text = f"{self.selector} not found" + return f"text -> {self.text} not found within {self.timeout}s, {text}" + + def _get_element(self, driver): + return driver.find_element(By.CSS_SELECTOR, self.selector) + + +class style_to_equal: + def __init__(self, selector, style, val): + self.selector = selector + self.style = style + self.val = val + + def __call__(self, driver): + try: + elem = driver.find_element(By.CSS_SELECTOR, self.selector) + val = elem.value_of_css_property(self.style) + logger.debug("style to equal {%s} => expected %s", val, self.val) + return val == self.val + except WebDriverException: + return False + + +class class_to_equal: + def __init__(self, selector, classname): + self.selector = selector + self.classname = classname + + def __call__(self, driver): + try: + elem = driver.find_element(By.CSS_SELECTOR, self.selector) + classname = elem.get_attribute("class") + logger.debug( + "class to equal {%s} => expected %s", classname, self.classname + ) + return str(classname) == self.classname + except WebDriverException: + return False |