class ServicesAdminPage(GkrPage): SERVICES_LIST = AdminServicesTable(u"Список услуг (администрирование)", By.XPATH, ".//tbody") NAME = Input(u"Поле 'Название'", By.XPATH, ".//div[child::input[@id='name']]") STATUS = Select(u"Список 'Отображение услуги на терминале'", By.XPATH, ".//select[@id='status']") PREFIX = Input(u"Поле 'Префикс'", By.XPATH, ".//div[child::input[@id='servicePrefix']]") GROUP = Select(u"Список 'Группа'", By.XPATH, ".//select[@id='groupId']") DURATION = Input(u"Поле 'Регламент услуги'", By.XPATH, ".//div[child::input[@id='duration']]") ADDITIONAL_DURATION = Input( u"Поле 'Доп. время на объект недвижимости'", By.XPATH, ".//div[child::input[@id='aditional_duration']]") PERCENT_RECORDS = Input(u"Поле 'Максимальный % времени для услуги'", By.XPATH, ".//div[child::input[@id='precentRecords']]") PERCENT_RECORDS_ADVANCE = Input( u"Поле 'Максимальный % времени для услуги предв.'", By.XPATH, ".//div[child::input[@id='precentRecordsAdvance']]") CALENDAR = Select(u"Список 'Календарь'", By.XPATH, ".//select[@id='calendar']") SCHEDULE = Select(u"Список 'Расписание'", By.XPATH, ".//select[@id='schedule']") CLEAN = BaseElement(u"Кнопка 'Очистить форму'", By.XPATH, ".//button[@type='button']") SUBMIT = BaseElement(u"Кнопка 'Добавить'", By.XPATH, ".//input[@type='submit']")
class StandardsAdminPage(GkrPage): WAIT_MAX_ADVANCE = Input( u"Поле 'Опоздание на регистрацию из предварительной очереди, в минутах'", By.XPATH, ".//table[@class='table']/tbody/tr[2]/td") FINISH_DATE = Input( u"Поле 'Конечная дата предварительной записи, в минутах'", By.XPATH, ".//table[@class='table']/tbody/tr[3]/td") SUCCESS_MESSAGE = BaseElement(u"Сообщение об успешном сохранении формы", By.ID, "saved") SUBMIT = BaseElement(u"Кнопка 'Сохранить'", By.ID, "saveBut")
class RecoveryForm(BasePage): EMAIL = Input("Поле 'E-mail'", By.XPATH, ".//div[child::*[contains(text(),'E-mail адрес')]]") ERROR = BaseElement( "Сообщение об ошибке", By.XPATH, ".//div[contains(@class,'error') and contains(@style,'visible')]") SUBMIT = BaseElement("Кнопка 'Восстановить'", By.XPATH, ".//button[@type='submit']") WAIT = BaseElement("Элемент ожидания", By.XPATH, ".//p[@id='restore-password-wait']") SUCCESS_TEXT = BaseElement("Успешное подтверждение восстановления", By.XPATH, ".//div[@class='success']")
class EditNewsPage(GkrPage): TITLE = BaseElement("Поле 'Заголовок новости'", By.ID, "title") DESC = BaseElement("Поле 'Текст новости'", By.ID, "text") PUBLISH_DATE = Input("Поле 'Дата создания'", By.XPATH, ".//*[child::*[contains(text(),'Дата')]]") IS_PUBLISHED = Checkbox("Чекбокс 'Опубликовать'", By.XPATH, ".//input[@type='checkbox']") SUBMIT = BaseElement("Кнопка 'Создать'", By.XPATH, ".//button[@type='submit']") ERROR = BaseElement("Сообщение об ошибке", By.XPATH, ".//span[contains(@style,'ff0000')]")
class SchedulePage(GkrPage): SCHEDULE_LIST = Select("Список расписаний", By.ID, "scheduleList") DUPLICATE = BaseElement("Кнопка 'Дублировать план'", By.XPATH, ".//button[text()='Дублировать план']") SAVE = BaseElement("Кнопка 'Сохранить план'", By.XPATH, ".//button[text()='Сохранить план']") DELETE = BaseElement("Кнопка 'Удалить план'", By.XPATH, ".//button[text()='Удалить план']") SETTINGS_TABLE = AdminScheduleTable("Таблица параметров плана'", By.XPATH, ".//table[@class='table']") SUCCESS_MESSAGE = BaseElement("Сообщение об успешном действии", By.ID, "successlabel") ERROR_MESSAGE = BaseElement("Сообщение об ошибке", By.ID, "errorLabel")
class TCustomersAdminPage(GkrPage): TERM_FIELD = Input(u"Поле 'Поиск'", By.XPATH, ".//div[child::input[@name='term']]") SEARCH_SUBMIT = BaseElement(u"Кнопка 'Поиск'", By.XPATH, ".//input[@type='submit']") TABLE = List(u"Таблица пользователей", By.XPATH, ".//tbody/tr")
class CustomerEditPage(GkrPage): NAME = Input("Поле 'Имя'", By.XPATH, ".//li[child::*[@for='name']]") SURNAME = Input("Поле 'Фамилия'", By.XPATH, ".//li[child::*[@for='surname']]") PATRONYMIC = Input("Поле 'Отчество'", By.XPATH, ".//li[child::*[@for='patronymic']]") BIRTHDAY = Input("Поле 'Дата рождения'", By.XPATH, ".//li[child::*[@for='birthday']]") LOGIN = Input("Поле 'Логин'", By.XPATH, ".//li[child::*[@for='login']]") PASSWORD = Input("Поле 'Паспорт'", By.XPATH, ".//li[child::*[@for='password']]") EMAIL = Input("Поле 'Email'", By.XPATH, ".//li[child::*[@for='email']]") MOBILE = Input("Поле 'Мобильный телефон'", By.XPATH, ".//div[child::*[@for='mobilePhone']]") HOME_PHONE = Input("Поле 'Дом. телефон'", By.XPATH, ".//div[child::*[@for='homePhone']]") PASSPORT_SERIAL = Input("Поле 'Серия паспорта'", By.XPATH, ".//div[child::*[@for='serial']]") PASSPORT_NUMBER = Input("Поле 'Номер паспорта'", By.XPATH, ".//div[child::*[@for='no']]") ISSUE_DATE = Input("Поле 'Когда выдан'", By.XPATH, ".//div[child::*[@for='whenAt']]") ISSUE = Input("Поле 'Кем выдан'", By.XPATH, ".//li[child::*[@for='issue']]") INN = Input("Поле 'Инн'", By.XPATH, "") SUBMIT = BaseElement( "Кнопка 'Подтвердить'", By.XPATH, ".//*[contains(text(),'Подтвердить') or contains(text(),'Сохранить')]")
class LoginForm(BasePage): LOGIN = Input("Поле 'Логин'", By.XPATH, ".//div[child::label[contains(text(), 'Введите логин')]]") PASSWORD = Input( "Поле 'Пароль'", By.XPATH, ".//div[child::label[contains(text(), 'Введите пароль')]]") PASSWORD_RECOVERY = Link("Ссылка 'Забыли пароль?'", By.XPATH, ".//a[contains(text(),'Забыли пароль')]") ERROR = BaseElement( "Сообщение об ошибке", By.XPATH, ".//div[@class='error' and contains(@style,'visible')]") REGISTRATION = BaseElement("Кнопка 'Регистрация'", By.XPATH, ".//*[contains(text(),'Регистрация')]") RECOVERY = Link("Ссылка 'Забыли пароль'", By.XPATH, ".//a[contains(@href,'restore')]") SUBMIT = BaseElement("Кнопка 'Войти'", By.XPATH, ".//*[contains(text(),'Войти')]")
class TopMenu(BasePage): LOGIN_LINK = BaseElement(u"Ссылка 'Войдите'", By.XPATH, ".//a[contains(@class,'link_sign-in')]") REG_LINK = Link(u"Ссылка 'Зарегистрируйтесь'", By.XPATH, ".//a[contains(@class,'link_sign-up')]") LOGOUT = Link(u"Ссылка 'Выйти'", By.XPATH, ".//a[contains(@href,'logout')]") PROFILE = Link(u"Ссылка на профиль пользователя", By.XPATH, ".//a[contains(@href,'customer')]")
class ProfilePage(GkrPage): SURNAME = Input("Поле 'Фамилия'", By.XPATH, ".//div[child::*[contains(text(),' Фамилия')]]") NAME = Input("Поле 'Имя'", By.XPATH, ".//div[child::*[contains(text(),' Имя')]]") PATRONYMIC = Input("Поле 'Отчество'", By.XPATH, ".//div[child::*[contains(text(),' Отчество')]]") BIRTHDAY = Input("Поле 'Дата рождения'", By.XPATH, ".//div[child::*[contains(text(),'Дата рождения')]]") EMAIL = Input("Поле 'Email'", By.XPATH, ".//div[child::*[contains(text(),' E-mail')]]") MOBILE = Input("Поле 'Мобильный телефон'", By.XPATH, ".//div[child::*[contains(text(),' Мобильный')]]") HOME_PHONE = Input("Поле 'Дом. телефон'", By.XPATH, ".//div[child::*[contains(text(),' Домашний')]]") PASSPORT_SERIAL = Input( "Поле 'Серия паспорта'", By.XPATH, ".//div[child::*[contains(text(),'ерия паспорта')]]") PASSPORT_NUMBER = Input( "Поле 'Номер паспорта'", By.XPATH, ".//div[child::*[contains(text(),'Номер паспорта')]]") ISSUE = Input("Поле 'Кем выдан'", By.XPATH, ".//div[child::*[contains(text(),'Кем выдан')]]") ISSUE_DATE = Input("Поле 'Когда выдан'", By.XPATH, ".//div[child::*[contains(text(),'Когда выдан')]]") INN = Input("Поле 'Инн'", By.XPATH, ".//div[child::*[contains(text(),'Инн')]]") PASSWORD = Input("Поле 'Пароль'", By.XPATH, ".//div[child::*[contains(text(),' Новый пароль')]]") PASSWORD_CONFIRM = Input( "Поле 'Повтор пароля'", By.XPATH, ".//div[child::*[contains(text(),' Повторите пароль')]]") ERROR_MESSAGE = BaseElement("Сообщение об ошибке", By.XPATH, ".//div[@style='color: red']") SUCCESS_MESSAGE = BaseElement("Сообщение об успешном измении профиля", By.XPATH, ".//div[@style='color: green']") SUBMIT = BaseElement("Кнопка 'Сохранить изменения'", By.XPATH, ".//button[contains(text(), 'Сохранить изменения')]") TICKETS_HISTORY = HistoryServices("Блок 'История услуг'", By.XPATH, ".//div[@class='history-services']")
class ImportPage(GkrPage): IMPORT_FILE = BaseElement("Поле добавления файла", By.XPATH, ".//input[@type='file']") SUBMIT = BaseElement("Кнопка 'Загрузить файл'", By.XPATH, ".//input[@type='submit']") # подстраница Предпросмотр перед импортом регистраторов ORGANIZATIONS = Select("Список 'Организация'", By.ID, 'selectSome') ADD_CHECKBOX = Checkbox("Чекбокс 'Добавить новых регистраторов'", By.ID, 'addNew1') READY_TABLE = List( "Таблица 'Готово к импорту'", By.XPATH, ".//div[following-sibling::span[contains(text(),'Готово к импорту')]]//tbody/tr" ) IMPORT_BUTTON = BaseElement("Кнопка 'Импорт'", By.ID, "importButton") # подстраница Отчет о импорте ADDED = BaseElement("Количество добавленных регистраторов", By.XPATH, u"//div[contains(@class,'type2')]/div[5]/h3")
class TicketDataDialog(BasePage): TICKET_NUMBER = BaseElement("Номер", By.ID, "ticket_id") TICKET_TIME = BaseElement("Время", By.ID, "ticket_time") TICKET_SERVICE = BaseElement("Услуга", By.ID, "ticket_service") TICKET_DEP = BaseElement("Отделение", By.ID, "ticket_department") TICKET_CUSTOMER = BaseElement("Посетитель", By.ID, "ticket_customer") TICKET_ADDRESS = BaseElement("Недвижимость", By.ID, "ticket_address") TICKET_PRINT = BaseElement("Кнопка 'Печать талона'", By.ID, "pdf_ticket") GET_TICKET = BaseElement("Кнопка 'Получить талон'", By.ID, "submit") @property def close(self): return self.element.find_element(By.XPATH, ".//a[contains(@class,'close')]")
class StatisticPage(GkrPage): CREATION_DATE = BaseElement("Кнопка фильтра по дате создания", By.XPATH, ".//input[@value='created']") ADVANCE_DATE = BaseElement("Кнопка фильтра по дате посещения'", By.XPATH, ".//input[@value='advance']") DATE_FROM = BaseElement("Поле дата с", By.ID, "from") DATE_TO = BaseElement("Поле дата по", By.ID, "to") DEPARTMENT = Select("Список подразделений", By.NAME, "department") DETAIL_DAY = BaseElement("Кнопка фильтра по дате создания", By.XPATH, ".//input[@value='day']") DETAIL_HOUR = BaseElement("Кнопка фильтра по дате создания", By.XPATH, ".//input[@value='hour']") TABLE = StatisticTable("Таблица статистики", By.XPATH, ".//table") SUBMIT = BaseElement("Кнопка 'Ок'", By.XPATH, ".//button[@type='submit']")
class HistoryPage(GkrPage): SEARCH_FIELD = Input("Поле ввода критерия поиска", By.XPATH, ".//div[contains(@class,'header_history')]") SEARCH_BUTTON = BaseElement("Кнопка 'Поиск'", By.XPATH, ".//input[@value='Поиск']") SEARCH_ROWS = List("Таблица истории результатов ", By.XPATH, "//table[@class='table']/tbody/tr")
class NewsAdminPage(GkrPage): CREATE_NEWS = BaseElement("Кнопка 'Создать новость'", By.XPATH, ".//a[@class='button_type1']") NEWS_LIST = AdminNewsTable("Список администрируемых новостей'", By.XPATH, ".//tbody")
class AddressDialog(BasePage): VERIFY = BaseElement("Кнопка 'Проверить'", By.XPATH, ".//button[child::*[text()='Проверить']]") MANUAL = BaseElement("Кнопка 'Ввести вручную'", By.XPATH, ".//button[child::*[text()='Ввести вручную']]")
class QueuePage(GkrPage): @property def address_dialog(self): return AddressDialog(self.config) SURNAME = Input("Поле 'Фамилия'", By.XPATH, ".//div[child::*[contains(text(),' Фамилия')]]") NAME = Input("Поле 'Имя'", By.XPATH, ".//div[child::*[contains(text(),' Имя')]]") PATRONYMIC = Input("Поле 'Отчество'", By.XPATH, ".//div[child::*[contains(text(),' Отчество')]]") BIRTHDAY = Input("Поле 'Дата рождения'", By.XPATH, ".//div[child::*[contains(text(),'Дата рождения')]]") EMAIL = Input("Поле 'Email'", By.XPATH, ".//div[child::*[contains(text(),' E-mail')]]") MOBILE = Input("Поле 'Мобильный телефон'", By.XPATH, ".//div[child::*[contains(text(),' Мобильный')]]") HOME_PHONE = Input("Поле 'Дом. телефон'", By.XPATH, ".//div[child::*[contains(text(),' Домашний')]]") PASSPORT_SERIAL = Input( "Поле 'Серия паспорта'", By.XPATH, ".//div[child::*[contains(text(),'ерия паспорта')]]") PASSPORT_NUMBER = Input( "Поле 'Номер паспорта'", By.XPATH, ".//div[child::*[contains(text(),'Номер паспорта')]]") ISSUE = Input("Поле 'Кем выдан'", By.XPATH, ".//div[child::*[contains(text(),'Кем выдан')]]") ISSUE_DATE = Input("Поле 'Когда выдан'", By.XPATH, ".//div[child::*[contains(text(),'Когда выдан')]]") DEPARTMENT_SELECT = Select(u"Список 'Отделение'", By.ID, "department_id") DEPARTMENT_TEXT = BaseElement(u"Текст 'Отделение'", By.ID, "department_name") SERVICE = Select(u"Список 'Услуга'", By.ID, "serviceId") OBJECT_TYPE = Select(u"Список 'Тип объекта недвижимости'", By.ID, "objectsCount") SUGGEST = List(u"Саджест 'Адрес объекта недвижимости'", By.XPATH, "//li[contains(@id,'ui-id')]") CITY = Select(u"Список 'Район / Город'", By.ID, "address.region") LOCALITY = Input(u"Поле 'Населенный пункт'", By.XPATH, ".//div[./label[contains(text(),'Населенный пункт')]]") STREET = Input(u"Поле 'Улица'", By.XPATH, ".//div[./label[contains(text(),'Улица')]]") HOUSE = Input(u"Поле 'Дом'", By.XPATH, ".//div[./label[contains(text(),'Дом')]]") FLAT = Input(u"Поле 'Квартира'", By.XPATH, ".//div[./label[contains(text(),'Квартира')]]") OTHER = Input( u"Поле 'Иное'", By.XPATH, ".//div[./label[contains(text(),'Адрес с правоустанавливающего')]]") CAPTCHA = Input(u"Поле 'Текст с картинки'", By.XPATH, ".//div[./label[contains(text(),'Введите текст')]]") STAT_INDICATOR = BaseElement( "Уровень занятости отдела", By.XPATH, ".//span[@class='statistics-indicator__value']") ERROR_TEXT = List("Сообщения с ошибками", By.XPATH, "//div[@class='text_error']") QUEUE_FULL_MESSAGE = BaseElement( "Сообщения о следующей дате открытия", By.XPATH, ".//div[@id='no-time' and not(contains(@style,'display'))]") CALENDAR = Calendar("Календарь", By.XPATH, "//div[contains(@class,'datetime')]") SUBMIT = BaseElement("Кнопка 'Получить талон'", By.ID, "submit")