def test_authorization_by_phone_incorrect_user_disabled(self, type_password="******"): """ Title: Я не могу войти в систему по телефону, если мой пользователь в статусе DISABLED (пользователь Заблокирован) Description: * Отображается соответствующее сообщение """ service_log.run(self) status = "DISABLED" user = databases.db1.accounting.get_not_enabled_user(status=status)[0] AccountingMethods.save_user_password(user_id=user["id"], hash_passwd=user["code_value"]) # Устанавливаем новый пароль для пользователя default_new_passwd = AccountingMethods.get_default_password() hash_res_new = generate_sha256(default_new_passwd, user["salt"]) databases.db1.accounting.update_user_password(user["id"], hash_res_new) # Переходим на страницу авторизации self.go_authorization_page(self.driver) obj_phone, obj_password, obj_submit_button = self.get_data_authorization(self.driver) changed_passwd = self.get_password(type_passwd=type_password, source_passwd=default_new_passwd) changed_phone = self.get_phone(type_phone=self.type_phone, source_phone=user["phone"]) # Вводим данные на авторизацию self.send_password(password_object=obj_password, password_number=changed_passwd) self.send_phone(phone_object=obj_phone, phone_number=changed_phone) # Нажатие на кнопку авторизации self.submit_button(obj_submit_button) # Проверка блокировки пользователя Navigate.get_element_navigate(self.driver, self.check_auth.ERR_CHECK_DISABLED) Navigate.go_to_main_page(self.driver) self.check_header_widget_visitor(self.driver)
def get_user_card_web_status(driver, web_status_xpath, user_info, online_status='В сети'): if user_info["online_status"] == 'ONLINE': p = Navigate.get_element_navigate(driver, web_status_xpath % online_status) else: p = Navigate.get_element_navigate(driver, web_status_xpath % HelpUserCardMethods.need_time(user_info['last_activity_timestamp'])) return p
def check_main_menu_category(self, driver, section_tree, category_dict): """ Проверка категорий и их картинок в меню раздела """ for section in section_tree: section_name = section.localizedName if section_name == 'Торговое оборудование': continue # Кликаем на раздел, чтобы открыть меню раздела section_clk_menu = Navigate.get_element_navigate(driver, self.xpath_section % section_name, mode=None) Auth.click_button(section_clk_menu) # Проверка, что раздел стал открытым Navigate.get_element_navigate(driver, self.xpath_section_menu % section_name, mode=None) # Проверка, что открылось меню раздела Navigate.get_element_navigate(driver, Navigate.check_main.SECTION_MENU, mode=None) # Получаем категории раздела category_id_list = self.get_categories_list(section) category_tree = self.get_categories_tree(category_dict, category_id_list) cat_name_list = [category.localizedName for category in category_tree] # Получить объекты категорий меню cat_iu_list = self.get_categories(driver) name_ui_list = [category.text.encode('utf-8') for category in cat_iu_list] # Проверка количества возвращенных апи и показанных категорий count_ui_cat = len(cat_iu_list) count_db_cat = len(category_tree) err_msg = "Количество разделов в главном меню='%d' больше с количества разделов из БД='%d'" self.assertLessEqual(count_ui_cat, count_db_cat, err_msg % (count_ui_cat, count_db_cat)) sub = lambda db, ui: filter(lambda x: x not in db, ui) # Берем максимум 6 категорий отображаемых в меню name_ui = name_ui_list[:6] sub_cat = sub(cat_name_list, name_ui) err_msg = "В разделе '%s' содержится категория '%s', которой нет в ответе АПИ: %s" self.assertFalse(sub_cat, err_msg % (section_name, sub_cat, cat_name_list))
def get_user_store_photo_in_cont(driver, path, photo_xpath, logo_id): if logo_id is None: p = Navigate.get_element_navigate(driver, path + Navigate.check_user_contact.US_LOGO_STUB, sleep=0.1, mode=None) else: p = Navigate.get_element_navigate(driver, path + photo_xpath % logo_id, sleep=0.1, mode=None) return p
def get_sub_categories(driver): """ Получить под-категории из категории раздела :param driver: :return: """ Navigate.get_element_navigate(driver, Navigate.check_main.MAIN_MENU_SUB_CATEGORY, mode=None) return driver.find_elements_by_xpath(Navigate.check_main.MAIN_MENU_SUB_CATEGORY_ABSTRACT)
def get_user_store_name(driver, path, name_xpath, name): if name is None: p = Navigate.get_element_navigate(driver, path + Navigate.check_user_contact.US_WITHOUT_NAME, sleep=0.1, mode=None) else: Navigate.get_element_navigate(driver, path + Navigate.check_user_contact.US_LABEL_NAME, sleep=0.1, mode=None) p = Navigate.get_element_navigate(driver, path + name_xpath % name, sleep=0.1, mode=None) return p
def check_no_add_contact_btn(self, driver): f = False try: Navigate.get_element_navigate(driver, Navigate.click_user_contact.BTN_ADD_CONTACT, mode=None, sleep=0.1) f = True except Exception: pass self.assertFalse(f, "Появилась кнопка добавить пользователя")
def check_form_create_user(self, driver): """ Проверка формы Создание пользователя в бэк-офисе :param driver: :return: """ for title in self.USER_FORM_TITLES: HNCK.get_element_navigate(driver, HNCK.check_back_users.NAME_FIELDS % title)
def get_back_auth_data(driver): """ Получение форм и кнопки войти на странице авторизации бэк-офиса :param driver: :return: """ obj_login = HNCK.get_element_navigate(driver, HNCK.input_back_auth.FORM_LOGIN) obj_pass = HNCK.get_element_navigate(driver, HNCK.input_back_auth.FORM_PASS) obj_submit = HNCK.get_element_navigate(driver, HNCK.click_back_auth.BTN_SUBMIT) return obj_login, obj_pass, obj_submit
def get_sent_success_btn(driver): """ Получить объекты кнопок На страницу товара и В чат Проверка сообщения об успешной отправке :param driver: :return: """ Navigate.get_element_navigate(driver, Navigate.check_good.MSG_SENT_SUCCESS, mode=None) btn_to_good = Navigate.get_element_navigate(driver, Navigate.click_good.BTN_TO_CARD_GOOD, mode=None) btn_to_chat = Navigate.get_element_navigate(driver, Navigate.click_good.BTN_TO_CHAT, mode=None) return btn_to_good, btn_to_chat
def check_card_user_in_search_contact(self, driver, user): path_fg = Navigate.check_user_contact.USER_IN_SEARCH service_log.put("Start checking user card in search contact by user_id='%s'" % user["id"]) Navigate.get_element_navigate(driver, path_fg, mode=None, e_msg="Не найдена карточка пользователя в поисковй выдаче") self.get_user_card_photo_in_cont(driver, path_fg, Navigate.check_user_contact.FU_USER_PHOTO_IN_SEARCH, user["avatar_id"]) HelpUserCardCheckMethods.get_user_card_name(driver, path_fg + Navigate.check_user_contact.FU_USER_NAME, user["display_name"]) HelpUserCardCheckMethods.get_user_card_on_off_line(driver, path_fg + Navigate.check_user_contact.FU_USER_STATUS, user) service_log.put("Success checking user card in search contact by user_id='%s'" % user["id"])
def get_all_fields(driver): """ Получить все input объекты формы обратной связи :return: """ obj = dict() obj['name'] = HNCM.get_element_navigate(driver, HNCM.input_contacts.NAME) obj['phone'] = HNCM.get_element_navigate(driver, HNCM.input_contacts.PHONE) obj['email'] = HNCM.get_element_navigate(driver, HNCM.input_contacts.EMAIL) obj['message'] = HNCM.get_element_navigate(driver, HNCM.input_contacts.MESSAGE) return obj
def do_login(driver, sleep=2): """ Авторизоваться нажав на кнопку с текущей страницы. :param driver: ссылка на драйвер :param sleep: ожидание """ # time.sleep(sleep) reg_log_btn = HelpNavigateCheckMethods.get_element_navigate(driver, HelpAuthData.click_main.BUTTON_REG_AN_LOGIN) HelpAuthCheckMethods.click_button(reg_log_btn) login_button = HelpNavigateCheckMethods.get_element_navigate(driver, HelpAuthData.click_main.BUTTON_LOGIN) login_button.is_displayed() login_button.is_enabled() HelpNavigateCheckMethods.element_click(driver, login_button)
def get_restore_password_by_email_success(driver): """ Получить элементы формы восстановления пароля по емайл, письмо тправлено :param driver: ссылка на драйвер :return: словарь со ссылками на элементы формы восстановления пароля """ restore_email = { "restore_title": Navigate.get_element_navigate(driver, Navigate.check_restore.TITLE_INPUT_PASS_PAGE), "restore_text": Navigate.get_element_navigate(driver, Navigate.check_restore.TEXT_NEW_PASS_SET), "start_work_btn": Navigate.get_element_navigate(driver, Navigate.click_restore.BTN_START_WORK), } service_log.put("Get elements form restore %s" % str(restore_email)) return restore_email
def get_restore_email_sent_form(driver): """ Получить элементы формы восстановления пароля по емайл, письмо тправлено :param driver: ссылка на драйвер :return: словарь со ссылками на элементы формы восстановления пароля """ restore_email = { "restore_title": Navigate.get_element_navigate(driver, Navigate.check_restore.TITLE_RESTORE_PAGE), "restore_text": Navigate.get_element_navigate(driver, Navigate.check_restore.TEXT_SENT_TO_EMAIL), "to_main_btn": Navigate.get_element_navigate(driver, Navigate.click_restore.BTN_TO_MAIN), } service_log.put("Get elements form restore %s" % str(restore_email)) return restore_email
def check_user_store(self, driver, link_db, user): sh = lambda u: 0 if u['shop_id'] is None else u['shop_id'] st = link_db.accounting.get_shop_details_by_shop_id(sh(user)) store = self.get_store_list(st) path_fg = Navigate.check_user_contact.USER_STORE service_log.put("Start checking user store in active contact by user_id='%s'" % user['id']) Navigate.get_element_navigate(driver, path_fg, sleep=1, mode=None, e_msg="Не найден блок инфо о магазине") self.get_user_store_photo_in_cont(driver, path_fg, Navigate.check_user_contact.US_LOGO, store['logo_id']) self.get_user_store_name(driver, path_fg, Navigate.check_user_contact.US_NAME, store["name"]) self.get_user_store_address(driver, path_fg, Navigate.check_user_contact.US_ADDRESS, store["address"]) self.get_user_store_description(driver, path_fg, Navigate.check_user_contact.US_DESCRIPTION, store["description"]) Navigate.get_element_navigate(driver, Navigate.click_user_contact.IN_SHOP % user['id'])
def get_user_store_description(driver, path, name_xpath, description): p = False if description is None: try: Navigate.get_element_navigate(driver, path + name_xpath % '', sleep=0.1, mode=None) p = True except Exception: pass assert p is False, "Найдено поле описание, в базе поле описание пусто, поля не должно быть" else: p = Navigate.get_element_navigate(driver, path + name_xpath % description, sleep=0.1, mode=None) return p
def get_restore_email_form(driver): """ Получить элементы формы восстановления пароля по емайл :param driver: ссылка на драйвер :return: словарь со ссылками на элементы формы восстановления пароля """ restore_email = { "restore_title": Navigate.get_element_navigate(driver, Navigate.check_restore.TITLE_RESTORE_PAGE), "email_label": Navigate.get_element_navigate(driver, Navigate.check_restore.LABEL_EMAIL), "email_input": Navigate.get_element_navigate(driver, Navigate.input_restore.INPUT_EMAIL), "restore_btn": Navigate.get_element_navigate(driver, Navigate.click_restore.BTN_RESTORE), } service_log.put("Get elements form restore %s" % str(restore_email)) return restore_email
def check_delete_first_user_in_cl(self, driver, user_id, fav_usr, link_db): fav_users_list_old = link_db.accounting.get_fav_user_in_cl_user(user_id, fav_usr["id"]) self.assertNotEqual(len(fav_users_list_old), 0 , "Пользователя нет в БД контактах") self.delete_first_user_in_cl(driver, fav_usr) fav_users_list_new = link_db.accounting.get_fav_user_in_cl_user(user_id, fav_usr["id"]) self.assertEqual(len(fav_users_list_new), 0, "Пользователь есть в БД контактах: '%s'" % fav_users_list_new) HelpUserContactsCheckMethods.check_user_no_in_cl(self, driver, fav_usr["id"]) driver.refresh() Navigate.progress(driver) HelpUserContactsCheckMethods.check_user_no_in_cl(self, driver, fav_usr["id"]) Navigate.get_page(driver, Navigate.path_buyer.URL_BUYER % fav_usr["id"]) Navigate.get_element_navigate(driver, Navigate.click_user_contact.IN_CONTACT_USER, sleep=0.1, mode=None) driver.back()
def set_email(driver, email): """ Вводим емайл и сохраняем :param email: :return: """ input_email = HNCM.get_element_navigate(driver, HNCM.input_settings.EMAIL_ABSTRACT) input_email.click() ActionChains(driver).key_down(Keys.CONTROL).send_keys('a').key_up(Keys.CONTROL).key_down(Keys.DELETE).\ key_up(Keys.DELETE).perform() input_email.send_keys(email) submit_btn = HNCM.get_element_navigate(driver, HNCM.path_settings.PATH_COMMON_INFO + HNCM.click_settings.SAVE_BUTTON) HelpAuthCheckMethods.click_button(submit_btn, sleep=3)
def get_breadcrumbs(driver, xpath_breads=HelpNavigateCheckMethods.click_good.BREADCRUMBS): """ Получить названия хлебных крошек :param driver: :return: """ service_log.put("Get breadcrumbs.") bread_dict_value = { "root_cat": HelpNavigateCheckMethods.get_element_navigate(driver, xpath_breads % 1).text.encode("utf-8"), "cat": HelpNavigateCheckMethods.get_element_navigate(driver, xpath_breads % 2).text.encode("utf-8"), "final_cat": HelpNavigateCheckMethods.get_element_navigate(driver, xpath_breads % 3).text.encode("utf-8"), } service_log.put("Get breadcrumbs - successful") return bread_dict_value
def check_menu_profile_widget_total(self, driver, display_name, sleep=5): """ Проверка меню профиля. :param driver: ссылка на драйвер :param display_name: имя пользователя """ disp_name = None try: disp_name = HelpNavigateCheckMethods.get_element_navigate(driver, self.set_text_xpath_by_menu(display_name)) except UnicodeEncodeError: name_encode = display_name.encode("utf-8") disp_name = HelpNavigateCheckMethods.get_element_navigate(driver, self.set_text_xpath_by_menu(name_encode)) self.assertIsNotNone(disp_name) self.assertIsNotNone(HelpNavigateCheckMethods.get_element_navigate(driver, self.MENU_PROFILE_SETTINGS)) self.assertIsNotNone(HelpNavigateCheckMethods.get_element_navigate(driver, self.MENU_PROFILE_ACTION_HEADER))
def check_main_menu_section(self, driver, section_tree, section_menu_name=None): """ Проверка главного меню на наличие нужных разделов и остутсвие ненужных :param driver: :param section_tree: """ xpath = lambda sn, snm: self.xpath_section_menu % sn if sn == snm else self.xpath_section % sn # Проверка, что из апи пришли разделы и они есть в главном меню for section in section_tree: section_name = section.localizedName Navigate.get_element_navigate(driver, xpath(section_name, section_menu_name), mode=None) # Проверка количества возвращенных апи и показанных разделов count_ui_sections = len(self.get_sections(driver)) count_db_sections = len(section_tree) err_msg = "Количество разделов в главном меню='%d' не совпало с количеством разделов из БД='%d'" self.assertEqual(count_ui_sections, count_db_sections, err_msg % (count_ui_sections, count_db_sections))
def check_users(self, driver, pages, users_account, stop_test_pages=None): """ Проверка всей информации в бек-офисе о пользователе построчно :param driver: :param pages: :param users_account: :return: """ count_page = 0 for page in range(pages): count_page += 1 ids = driver.find_elements_by_xpath(HNCK.check_back_users.IDS) for id in ids: id = id.text.encode('utf-8')[4:] user = databases.db1.accounting.get_user_by_account_id(id)[0] self.check_user_in_db_query(user, users_account) user_account = databases.db1.accounting.get_user_account_info_by_id(user["id"])[0] count = self.get_info_line(driver, user) msg_count = "Найдено %s строк с упоминанием ID %s" self.assertEqual(len(count), 1, msg_count % (len(count), user["id"])) info_user_back = self.get_info_user_by_line(driver, count[0]) user_roles = databases.db1.accounting.get_user_role_by_id(user_id=user["id"]) info_user_db = self.get_info_user_by_db(user, user_account, HPSCM.get_user_role_ui(user_roles)) msg_check = "Данные из бэк офиса: '%s' не совпали с данными и базы: '%s'" self.assertEqual(info_user_back, info_user_db, msg_check % (info_user_back, info_user_db)) if stop_test_pages == count_page: break if pages > 1: next_pag = HNCK.get_element_navigate(driver, HNCK.click_back_users.PAG_NEXT) FrontAuthCheckMethods.click_button(next_pag)
def get_select_param(driver, param=''): """ Получить параметр для поиска пользователя :param driver: :return: """ return HNCK.get_element_navigate(driver, HNCK.click_back_users.SELECT_PARAM % param)
def get_select_role(driver, role=''): """ Получить роль для поиска пользователя :param driver: :return: """ return HNCK.get_element_navigate(driver, HNCK.click_back_users.SELECT_ROLE % role)
def check_success_create(self, driver, user_id): """ Проверка успешного создания пользователя :param driver: :return: """ return HNCK.get_element_navigate(driver, HNCK.check_back_users.CREATED_USER_ID % user_id)
def cat_sub_cat(self, driver, name_ui, category_dict, section, section_name): """ Проверка подкатегории у которой родительская категория - категория :param driver: :param name_ui: :param category_dict: :param section: :param section_name: :return: """ # Получаем категории раздела category_id_list = self.get_categories_list(section) category_tree = self.get_categories_tree(category_dict, category_id_list) # Проверка, что из апи пришли категории которые принадлежат секции меню for name in name_ui: service_log.put("CHECK. Sub-category in category '%s'" % name) cat_clk = Navigate.get_element_navigate(driver, self.xpath_category % name, mode=None) Auth.click_button(cat_clk) category = [cat for cat in category_tree if cat.localizedName == name] # Получаем подкатегории из категории раздела sub_id_list = self.get_categories_list(category[0]) sub_tree = self.get_categories_tree(category_dict, sub_id_list) sub_name_list = [sub.localizedName for sub in sub_tree] # Проверка возвращенных апи и показанных подкатегорий obj_ui_sub = self.get_sub_categories(driver) name_ui_sub = [obj.text.encode('utf-8') for obj in obj_ui_sub] # Получаем названия подкатегорий UI, которых нет в списке подкатегорий полученном из БД sub = lambda db, ui: filter(lambda x: x not in db, ui) sub_cat = sub(sub_name_list, name_ui_sub) err_msg = "В '%s -> %s' содержится подкатегория '%s', которой нет в ответе АПИ: %s" self.assertFalse(sub_cat, err_msg % (section_name, name, sub_cat, sub_name_list)) service_log.put("PASS. Sub-category in category '%s'" % name)
def get_input_field_find(driver): """ Получить строку поиска :param driver: :return: """ return HNCK.get_element_navigate(driver, HNCK.input_back_users.FIELD_FIND)
def get_last_msg2(driver): """ Получить последние сообщение чата (не удаляем пробелы и переносы строки) :param driver: ссфлка на драйвер :return: """ link_msg = Navigate.check_chat.LAST_MSG return Navigate.get_element_navigate(driver, link_msg).text.encode('utf-8')