class MainPage(BasePage): __INPUT = TextBox(By.XPATH, MainPageLocators.INPUT, "Input field") __SUBMIT = Button(By.XPATH, MainPageLocators.SUBMIT_BUTTON, "Submit button") __QR_CODE = Link(By.XPATH, MainPageLocators.QR_CODE, "QR code") def __init__(self): super().__init__(By.XPATH, MainPageLocators.MAIN_PAGE, "Main page") def change_type_coding(self, text): Link(By.XPATH, MainPageLocators.OBJECT_CODING_LINK.format(text=text), "Type coding link").click() def is_type_change(self, text): if Block(By.XPATH, MainPageLocators.OBJECT_CODING_LABLE.format(text=text), "Type coding text").get_text() == text: return True else: return False def enter_link(self, text): self.__INPUT.clear_field() self.__INPUT.send_keys(text) self.__SUBMIT.click() def get_qr_code(self): url = self.__QR_CODE.get_attribute('src') return APIUtils.get_image(url)
class Frame: __TEXT_FIELD = TextBox(By.XPATH, FrameLocators.LOCATOR_FRAME_TEXT, "Text field") __IFRAME = By.XPATH, FrameLocators.LOCATOR_FRAME_IFRAME __BOLD_BUTTON = Button(By.XPATH, FrameLocators.LOCATOR_FRAME_BOLD_BUTTON, "Bold button") __BOLD_TEXT = TextBox(By.XPATH, FrameLocators.LOCATOR_FRANE_BOLD_TEXT, "Bold text") def __init__(self, settings): self.settings = settings def send_text(self, text): """ method to send random text """ Browser().switch_to_frame_by_locator(*self.__IFRAME) element = self.__TEXT_FIELD element.selenium_clear() element.send_keys(text) Browser().switch_to_default_content() def get_text(self): """ method to get text :return: text """ Browser().switch_to_frame_by_locator(*self.__IFRAME) text = self.__TEXT_FIELD.find_element().text Browser().switch_to_default_content() return text def do_text_bold(self): """ method to do text bold """ Browser().switch_to_frame_by_locator(*self.__IFRAME) element = self.__TEXT_FIELD.find_element() element.send_keys(Keys.CONTROL + self.settings['KEY_a']) Browser().switch_to_default_content() self.__BOLD_BUTTON.click() def is_text_bold(self): """ method to check text is bold :return: if the text is bold then return true or not return false """ Browser().switch_to_frame_by_locator(*self.__IFRAME) if self.__BOLD_TEXT.find_element(): return True else: return False
class UiPage(BasePage): """ Класс отдельной страницы наследуется от BasePage В конструкторе запускается метод __init__() родительского класса И инициализируются UI элементы принадлежащие странице. В классе можно создать вспомогательные методы-хэлперы объединяющие часто повторяющиеся действия в цепочки. И другие, по необходимости. """ def __init__(self): super(UiPage, self).__init__() self.address = "" """ инициализируем UI элементы """ # Форма подписки self.text_field_name = TextField('Поле "Имя пользователя"', locator="name", loc_type=By.NAME) self.text_field_email = TextField('Поле "Email"', locator="email", loc_type=By.NAME) self.text_field_time = TextField('Поле "Время"', locator="time", loc_type=By.NAME) self.btn_subscribe = Button('Кнопка "Подписаться"', locator='.btn-success', loc_type=By.CSS_SELECTOR) # Таблица со списком подписок self.subscribtions_table = Table('Таблица подписок', locator="tbody", loc_type=By.TAG_NAME) # Кнопки Refresh и Delete self.btn_sync = Button('Кнопка "Обновить"', locator='[data-test="sync-button"]', loc_type=By.CSS_SELECTOR) self.btn_clear = Button('Кнопка "Обновить"', locator='[data-test="clear-button"]', loc_type=By.CSS_SELECTOR) def set_email(self, value): self.text_field_email.set_value(value) def set_name(self, value): self.text_field_name.set_value(value) def set_time(self, value): self.text_field_time.set_value(value) def push_subscribe_button(self): self.btn_subscribe.click() def add_subscription(self, email, name, time): self.set_email(email) self.set_name(name) self.set_time(time) self.push_subscribe_button() def sync_subscriptions_list(self): self.btn_sync.click() def clear_subscriptions_list(self): self.btn_clear.click()
def __init__(self): super(UiPage, self).__init__() self.address = "" """ инициализируем UI элементы """ # Форма подписки self.text_field_name = TextField('Поле "Имя пользователя"', locator="name", loc_type=By.NAME) self.text_field_email = TextField('Поле "Email"', locator="email", loc_type=By.NAME) self.text_field_time = TextField('Поле "Время"', locator="time", loc_type=By.NAME) self.btn_subscribe = Button('Кнопка "Подписаться"', locator='.btn-success', loc_type=By.CSS_SELECTOR) # Таблица со списком подписок self.subscribtions_table = Table('Таблица подписок', locator="tbody", loc_type=By.TAG_NAME) # Кнопки Refresh и Delete self.btn_sync = Button('Кнопка "Обновить"', locator='[data-test="sync-button"]', loc_type=By.CSS_SELECTOR) self.btn_clear = Button('Кнопка "Обновить"', locator='[data-test="clear-button"]', loc_type=By.CSS_SELECTOR)
def get_buttons_by_id(id_name) -> list: logger.info("searching buttons with %s id" % id_name) result = __get_elements_by_id(id_name) result = [Button(i, "Element in list") for i in result] return result
def get_button_by_id_without_app_id(id_name, name) -> Button: logger.info("searching element with %s id and name %s" % (id_name, name)) return Button(ClientManager().driver.find_element_by_id(id_name), name)
def click_submit(self): Button(By.ID, "index_login_button", "Submit credentials").click()
def skip_validation_button(self) -> Button: return Button(By.ID, "validation_skip", "skip_phone_validation")
def get_side_bar_item(self, item: SideBarItems) -> Button: return Button(By.ID, item.value, f"Navigate to side bar item with id '{item.value}'")
def click_button_by_text(self, text): button = Button( By.XPATH, MainPageLocators.LOCATOR_MAIN_PAGE_BUTTON.format(text=text), f"{text} button") button.click()