from selenium.common.exceptions import NoSuchElementException, StaleElementReferenceException

from common import scaf

logger = scaf.get_logger(__name__)


class DynamicElement:
    def __init__(self, locator_type, locator, driver, name=None, parent=None):
        self.__driver = driver
        self.__locator_type = locator_type
        self.__locator = locator
        self.__name = locator if name is None else name
        self.__parent = parent

    @property
    def name(self):
        return self.__name

    @property
    def selenium_element(self):
        if self.__parent is None:
            try:
                logger.info(f"Looking for element {self.__locator}")
                return self.__driver.find_element(self.__locator_type,
                                                  self.__locator)
            except NoSuchElementException:
                logger.exception(
                    "An element '{0}' {1}could not be located on the page.".
                    format(
                        self.__name, "" if self.__locator == self.__name else
示例#2
0
import time
from selenium.webdriver import ActionChains
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException

from common.webdriver_qa_api.core.utils import assert_should_be_equal, fail_test, assert_should_be_not_equal,\
    assert_should_contain, assert_should_not_contain, assert_should_be_greater_than
from common.webdriver_qa_api.core.selenium_dynamic_elements import DynamicElement, DynamicElements
from common.scaf import get_logger, config

logger = get_logger(__name__)


class BaseElement:
    WAIT_SECONDS = config.web_settings.webdriver_default_wait_time

    def __init__(self, locator_type, locator, driver, name=None, parent=None):
        self.locator_type = locator_type
        self.locator = locator
        self.driver = driver
        self.parent = parent
        self.name = locator if name is None else name
        self.ALLOWED_DYNAMIC_METHODS = None
        self.element = DynamicElement(locator_type=locator_type,
                                      locator=locator,
                                      driver=driver,
                                      name=name,
                                      parent=parent)

    def __getattr__(self, item):