예제 #1
0
class BasePage(object):
    locators = basic_locators.BasePageLocators()

    def __init__(self, driver):
        self.driver = driver

    def find(self, locator, timeout=10):
        return self.wait(timeout).until(
            EC.presence_of_element_located(locator))

    def click(self, locator, timeout=10):
        for i in range(RETRY_COUNT):
            try:
                self.find(locator)
                element = self.wait(timeout).until(
                    EC.element_to_be_clickable(locator))
                element.click()
                return

            except StaleElementReferenceException:
                if i < RETRY_COUNT:
                    pass
        raise

    def wait(self, timeout=10):
        return WebDriverWait(driver=self.driver, timeout=timeout)
예제 #2
0
class BasePage(object):
    locators = basic_locators.BasePageLocators()

    def __init__(self, driver):
        self.driver = driver

    def find(self, locator, timeout=None) -> WebElement:
        return self.wait(timeout).until(EC.presence_of_element_located(
            locator))  # поиск элемента с ожиданием

    def click(self, locator, timeout=None):
        # попытки чтобы кликнуть
        for i in range(RETRY_COUNT):
            try:
                self.find(locator)
                element = self.wait(timeout).until(
                    EC.element_to_be_clickable(locator))
                element.click()
                return

            except StaleElementReferenceException:
                if i < RETRY_COUNT - 1:
                    pass
        raise

    def wait(self, timeout=None):
        if timeout is None:
            timeout = 5
        return WebDriverWait(self.driver, timeout=timeout)

    def fill_field(self, locator, key_value):
        field = self.find(locator)
        field.clear()
        field.send_keys(key_value)
예제 #3
0
def auth(driver, config):

    page_object = BasePage(driver, config)
    login = config['email']
    paswd = config['password']
    locator = basic_locators.BasePageLocators()
    page_object.click(locator.AUTH_BUTTON)
    page_object.find(locator.EMAIL).send_keys(login)
    page_object.find(locator.PASSWORD).send_keys(paswd)
    page_object.click(locator.ACCEPT)

    return MainPage(driver, config)
예제 #4
0
class BasePage(object):
    locators = basic_locators.BasePageLocators()

    def __init__(self, driver):
        self.driver = driver

    def find(self, locator, timeout=None) -> WebElement:
        # нотация WebElement удобна тем, что у метода find становятся доступны методы WebElement
        # а это очень удобно

        return self.wait(timeout).until(EC.presence_of_element_located(
            locator))  # поиск элемента с ожиданием

    def click(self, locator, timeout=None):
        # попытки чтобы кликнуть
        for i in range(RETRY_COUNT):
            try:
                self.find(locator)
                element = self.wait(timeout).until(
                    EC.element_to_be_clickable(locator))
                element.click()
                return

            except StaleElementReferenceException:
                if i < RETRY_COUNT - 1:
                    pass
        raise

    def scroll_to_element(self, element):
        # нигде не используется, потому что click сам скролит
        # просто пример возможной реализации
        self.driver.execute_script('arguments[0].scrollIntoView(true);',
                                   element)

    def wait(self, timeout=None):
        if timeout is None:
            timeout = 5
        return WebDriverWait(self.driver, timeout=timeout)

    def count_elements(self, locator, count, timeout=1):
        # этот метод считает количество элементов на странице
        # until принимает функцию, а значит мы можем написать и использовать свою, в нашем случае это lambda функция
        # в этом методе мы ожидаем пока не появится нужное нам количество элементов на странице

        self.wait(timeout).until(
            lambda browser: len(browser.find_elements(*locator)) == count)

    def search(self, query):
        search_field = self.find(self.locators.QUERY_LOCATOR)
        search_field.clear()
        search_field.send_keys(query)
        self.find(self.locators.GO_BUTTON).click()
예제 #5
0
def incorrect_input(driver, config):

    page_object = BasePage(driver, config)
    login = '******'
    paswd = 'Incorrect_user_password'
    config['fake_email'] = login
    locator = basic_locators.BasePageLocators()
    page_object.click(locator.AUTH_BUTTON)
    page_object.find(locator.EMAIL).send_keys(login)
    page_object.find(locator.PASSWORD).send_keys(paswd)
    page_object.click(locator.ACCEPT)

    return MainPage(driver, config)
class BasePage(object):
    locators = basic_locators.BasePageLocators()

    def __init__(self, driver):
        self.driver = driver

    def check_if_exists(self, locator, value):
        by, locator = locator
        try:
            self.find((by, locator.format(value)), timeout=5)
            return True
        except TimeoutException:
            return False

    def find(self, locator, timeout=None) -> WebElement:
        # нотация WebElement удобна тем, что у метода find становятся доступны методы WebElement
        # а это очень удобно

        return self.wait(timeout).until(EC.presence_of_element_located(
            locator))  # поиск элемента с ожиданием

    def click(self, locator, timeout=None):
        # попытки чтобы кликнуть
        for i in range(RETRY_COUNT):
            try:
                element = self.find(
                    locator, timeout
                )  #self.wait(timeout).until(EC.element_to_be_clickable(locator))
                element.click()
                return

            except StaleElementReferenceException:
                if i < RETRY_COUNT - 1:
                    pass
        raise

    def upload_file(self, locator, file_path, submit=None):
        upload_field = self.find(locator)
        upload_field.send_keys(file_path)
        if submit:
            self.click(locator=submit, timeout=4)

    def fill_field(self, locator, field_value):
        field = self.find(locator=locator)
        field.clear()
        field.send_keys(field_value)

    def wait(self, timeout=None):
        if timeout is None:
            timeout = 5
        return WebDriverWait(self.driver, timeout=timeout)
예제 #7
0
class BasePage(object):
    locators = basic_locators.BasePageLocators()

    def __init__(self, driver):
        self.driver = driver

    def find(self, locator, timeout=None) -> WebElement:
        # нотация WebElement удобна тем, что у метода find становятся доступны методы WebElement
        # а это очень удобно

        return self.wait(timeout).until(EC.presence_of_element_located(
            locator))  # поиск элемента с ожиданием

    def click(self, locator, timeout=None):
        # попытки чтобы кликнуть
        for i in range(RETRY_COUNT):
            try:
                self.find(locator)
                element = self.wait(timeout).until(
                    EC.element_to_be_clickable(locator))
                element.click()
                return

            except StaleElementReferenceException:
                if i < RETRY_COUNT - 1:
                    pass
        raise

    def drag_and_drop(self, item, target):
        item_drag = self.find(item)
        target_drop = self.find(target)
        ActionChains(self.driver).drag_and_drop(
            item_drag, target_drop
        ).perform(
        )  # Почему это не работает? Не могу придумать другой способ поместить баннер

    def count_elements(self, locator, count, timeout=1):
        # этот метод считает количество элементов на странице
        # until принимает функцию, а значит мы можем написать и использовать свою, в нашем случае это lambda функция
        # в этом методе мы ожидаем пока не появится нужное нам количество элементов на странице

        self.wait(timeout).until(
            lambda browser: len(browser.find_elements(*locator)) == count)

    def wait(self, timeout=None):
        if timeout is None:
            timeout = 5
        return WebDriverWait(self.driver, timeout=timeout)
예제 #8
0
class BasePage(object):

    locators = basic_locators.BasePageLocators()

    def __init__(self, driver):
        self.driver = driver

    def wait(self, timeout=None):
        if timeout is None:
            timeout = 6
        return WebDriverWait(self.driver, timeout=timeout)

    def find(self, locator, timeout=None):
        return self.wait(timeout).until(
            EC.presence_of_element_located(locator))

    def click(self, locator, timeout=None):
        for i in range(RETRY_COUNT):
            try:
                self.find(locator)
                element = self.wait(timeout).until(
                    EC.element_to_be_clickable(locator))
                #self.scroll_to_element(element)
                element.click()
                return
            except StaleElementReferenceException:
                if i < RETRY_COUNT - 1:
                    pass
        raise

    def scroll_to_element(self, element):
        self.driver.execute_script('arguments[0].scrollIntoView(true);',
                                   element)

    def move_to_element(self, locator):
        mv_to = self.find(locator)
        ActionChains(self.driver).move_to_element(mv_to).perform()