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 set_categories(driver, new_category_not=None): """ Задать новые категории для товара :param driver: :param new_categories_dict: :return: """ root_cat_xpath = HelpNavigateCheckMethods.click_my_goods.ROOT_CATEGORY % "" obj_categories = driver.find_elements_by_xpath(root_cat_xpath) service_log.put("Get all root categories obj.") list_root_cat = [] for obj_cat in obj_categories: list_root_cat.append(obj_cat.text.encode("utf-8")) service_log.put("Create list root categories='%s'" % list_root_cat) list_root_cat.remove(new_category_not) try: list_root_cat.remove("Выберите категорию") list_root_cat.remove("Товары для детей") list_root_cat.remove("Торговое оборудование") except Exception: pass service_log.put( "Remove old root category='%s' from list root category='%s'" % (new_category_not, list_root_cat) ) new_root = random.choice(list_root_cat) new_root_xpath = HelpNavigateCheckMethods.click_my_goods.ROOT_CATEGORY % new_root obj_root_cat = HelpNavigateCheckMethods.get_element_navigate(driver, new_root_xpath) service_log.put("Get new root category='%s'" % new_root) HelpAuthCheckMethods.click_button(obj_root_cat) xpath_category = ( HelpNavigateCheckMethods.click_my_goods.PATH_REQUIRE_FIELDS + HelpNavigateCheckMethods.click_my_goods.FIELD_CATEGORY ) HelpGoodMethods.select_category(driver, HelpGoodData.CAT_SUITE[new_root], xpath_category) return HelpGoodData.CAT_SUITE[new_root]
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 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 test_click_home(self): """ Title: Я могу находясь на любой странице сайта перейти на главную кликнув на "домик" в главном меню. """ parameters = { '404': '', 'section': str(self.section.categoryId), 'category': str(self.category.categoryId), 'sub-category': str(self.sub_category.categoryId), 'shop': AccountingMethods.get_default_user_id('seller'), } url = lambda sm, p, ps: sm[p] if ps[p] is '' else sm[p] % ps[p] for param in parameters: service_log.put("Checking...['%s']" % param) base_url = self.driver.current_url source = self.driver.page_source url_page = url(self.SITE_MAP, param, parameters) self.get_page(self.driver, url_page) source_new = self.driver.page_source self.assertNotEqual(source, source_new, "Переход по url='%s' не произошел" % url) btn_home = self.get_element_navigate(self.driver, self.click_main.MAIN_MENU_HOME) HelpAuthCheckMethods.click_button(btn_home, sleep=3) current_url = self.driver.current_url source_home = self.driver.page_source self.assertEqual(base_url, current_url, "Переход на главную не произошел") self.assertNotEqual(source_home, source_new, "Переход на главную не произошел") service_log.put("PASS...['%s']" % param)
def check_find_part_name(self, driver, part_name, sleep=2): count_contacts_old = self.get_count_contacts(driver) self.find_user_by_name(driver, part_name, sleep) count_contacts_new = self.get_count_contacts(driver) self.assertGreater(count_contacts_old, count_contacts_new, "После ввода части имени количество контактов " "уменьшилось") user = Navigate.get_element_navigate(driver, Navigate.click_user_contact.LAST_USER) HelpAuthCheckMethods.click_button(user)
def delete_first_user_in_cl(driver, fav_user): """ Удалить первого пользователя из списка контактов :param driver: :return: """ #Navigate.get_page(driver, Navigate.path_user_contact.URL_FAVORITES_USERS) usr = Navigate.get_element_navigate(driver, Navigate.check_user_contact.USER_CARD_BY_ID % fav_user["id"]) HelpAuthCheckMethods.click_button(usr) Navigate.get_element_navigate(driver, Navigate.check_user_contact.ACTIVE_USER_CARD_BY_ID % fav_user["id"]) btn_delete = Navigate.get_element_navigate(driver, Navigate.click_user_contact.BTN_DELETE, sleep=0.1) HelpAuthCheckMethods.click_button(btn_delete, sleep=1) Navigate.get_element_navigate(driver, Navigate.check_user_contact.MSG_DELETE_USR % fav_user["display_name"])
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 click_in_contact(driver, user_id): """ Нажимаем кнопку в контакты. :param driver: ссылка на драйвер :param user_id: идентификатор пользователя :return: type(bool) """ result = False try: Navigate.get_page(driver, Navigate.path_buyer.URL_BUYER % user_id) in_contact = Navigate.click_user_contact.IN_CONTACT_USER btn = Navigate.get_element_navigate(driver, in_contact, sleep=0.1, mode=None) HelpAuthCheckMethods.click_button(btn, sleep=0.1) result = True except Exception: result = False return result
def delete_user_in_contacts(driver, link_db, user_id): """ Удалить пользователей из списка контактов :param driver: :param count: :return: """ Navigate.get_page(driver, Navigate.path_user_contact.URL_FAVORITES_USERS) fav_users_list = link_db.accounting.get_fav_user_by_user_id(user_id) l = lambda l: list() if l is None else l count = len(l(fav_users_list)) while count != 0: btn_user = Navigate.get_element_navigate(driver, Navigate.click_user_contact.LAST_USER, sleep=1) HelpAuthCheckMethods.click_button(btn_user, sleep=0.1) btn_delete = Navigate.get_element_navigate(driver, Navigate.click_user_contact.BTN_DELETE, sleep=0.1) HelpAuthCheckMethods.click_button(btn_delete, sleep=1) fav_users_list = link_db.accounting.get_fav_user_by_user_id(user_id) count = len(l(fav_users_list))
def check_main_menu_sub_category(self, driver, section_tree, category_dict): """ Проверка подкатегорий в меню категории раздела """ for section in section_tree: section_name = section.localizedName service_log.put("CHECK. Section '%s'" % section_name) # Кликаем на раздел, чтобы открыть меню раздела 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) # Получить объекты категорий меню cat_iu_list = self.get_categories(driver) name_ui_list = [category.text.encode('utf-8') for category in cat_iu_list] # Берем максимум 6 категорий отображаемых в меню name_ui = name_ui_list[:6] p = lambda d, n, cd, se, sn: self.sub_cat(d, cd, se, sn) if n == list() else self.cat_sub_cat(d, n, cd, se, sn) p(driver, name_ui, category_dict, section, section_name) service_log.put("PASS. Section '%s'" % section_name)
def back_auth(role, obj_login, obj_pass, obj_submit, link_db): """ Авторизация в бэк-офисе :param role: :param obj_login: :param obj_pass: :param obj_submit: :return: """ # Настройка окружения и вспомогательные параметры default_user_id = AccountingMethods.get_default_user_id(role=role) user = link_db.accounting.get_user_by_account_id(default_user_id)[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) # Вводим данные на авторизацию FrontAuthCheckMethods.send_phone(phone_object=obj_login, phone_number=user["phone"][1:]) FrontAuthCheckMethods.send_password(password_object=obj_pass, password_number=default_new_passwd) # Нажатие на кнопку авторизации FrontAuthCheckMethods.submit_button(obj_submit) return user
def change_status(driver, status, wait=50): """ зменить статус пользхователя заблокировать/разблокировать :param driver: :param status: :return: """ success = False service_log.put("User status is %s. Begin change status." % status) if status == 'ENABLED': HNCK.get_element_navigate(driver, HNCK.check_back_users.MODAL_BODY, mode=None) disabled = HNCK.get_element_navigate(driver, HNCK.check_back_users.MODAL_DISABLED_BTN, mode=None) cancel = HNCK.get_element_navigate(driver, HNCK.check_back_users.MODAL_CANCEL_BTN, mode=None) FrontAuthCheckMethods.click_button(disabled) do_time = time.time() while time.time() - do_time < wait: try: driver.find_element_by_xpath(HNCK.check_back_users.DISABLED_SUCCESS) success = True break except Exception: pass assert success is not False, "Не получено сообщение о успешном изменении статуса" service_log.put("User status is changed.")
def test_go_to_section(self): """ Title: Я могу перейти на страницу выбранного Раздела, кликнув на "Все разделы" в выпадающем меню выбранного раздела Description: * Проверить, xто я нахожусь на странице соответствующего раздела """ for section in self.section_tree: if section.localizedName == "Торговое оборудование": continue # Кликаем на раздел, чтобы открыть меню раздела xpath_section = self.xpath_section % section.localizedName section_clk_menu = self.get_element_navigate(self.driver, xpath_section, mode=None) HelpAuthCheckMethods.click_button(section_clk_menu) # кликаем на ссылку в меню раздела "Все разделы" all_cat_btn = self.get_element_navigate(self.driver, self.click_main.ALL_CATEGORIES, mode=None) page_source = self.driver.page_source HelpAuthCheckMethods.click_button(all_cat_btn) url_ui = self.driver.current_url.encode('utf-8') page_source_new = self.driver.page_source url_need = self.ENV_BASE_URL + self.path_category.URL_PATH_ROOT_CATEGORY % section.categoryId err_msg_1 = "Переход не произошел, полученный урл: %s не совпадает с целевым: %s" self.assertEqual(url_ui, url_need, err_msg_1 % (url_ui, url_need)) err_msg_2 = "Тело страницы не измненилось, переход в раздел '%s' не произошел" self.assertNotEqual(page_source, page_source_new, err_msg_2 % section.localizedName)
def test_go_to_final_category(self): """ Title: Я могу перейти на страницу выбранной Подкатегории, кликнув на название подкатегории в выпадающем меню выбранного раздела и выбранной категории (...) Description: * Проверить, что я нахожусь на странице соответствующей подкатегории в пункте "Все товары" """ for section in self.section_tree: # Получить список категорий у которых есть подкатегории cat_id_list = self.get_categories_list(section) cat_tree = self.get_categories_tree(self.category_dict, cat_id_list) # Кликаем на раздел, чтобы открыть меню раздела xpath_section = self.xpath_section % section.localizedName section_clk_menu = self.get_element_navigate(self.driver, xpath_section, mode=None) HelpAuthCheckMethods.click_button(section_clk_menu) name_ui = section.localizedName category_in_sub = section # Для раздела Тороговое оборудования используется логика без переходв категорию, т.к. у него их нет if section.localizedName != "Торговое оборудование": # Получить объекты категорий меню cat_iu_list = self.get_categories(self.driver) name_ui_list = [category.text.encode('utf-8') for category in cat_iu_list] # Берем максимум 6 категорий отображаемых в меню names_ui = name_ui_list[:6] # кликаем на первую категорию name_ui = names_ui[0] xpath_category = self.xpath_category % name_ui cat_btn = self.get_element_navigate(self.driver, xpath_category, mode=None) HelpAuthCheckMethods.click_button(cat_btn) category_db = [item for item in cat_tree if item.localizedName == name_ui] category_in_sub = category_db[0] # Проверка возвращенных апи и показанных подкатегорий obj_ui_sub = self.get_sub_categories(self.driver) names_ui_sub = [obj.text.encode('utf-8') for obj in obj_ui_sub] # имя подкатегории name_ui_sub = names_ui_sub[0] sub_cat_id_list = self.get_categories_list(category_in_sub) sub_cat_tree = self.get_categories_tree(self.category_dict, sub_cat_id_list) sub_category_db = [item for item in sub_cat_tree if item.localizedName == name_ui_sub] sub_category_id = sub_category_db[0].categoryId xpath_sub_cat = self.click_main.MAIN_MENU_SUB_CATEGORY_BY_NAME % name_ui_sub # кликаем на ссылку подкатегориив меню категории sub_cat_btn = self.get_element_navigate(self.driver, xpath_sub_cat, mode=None) page_source = self.driver.page_source HelpAuthCheckMethods.click_button(sub_cat_btn) self.get_element_navigate(self.driver, self.check_catalog.ACTIVE_TREE_CATEGORY % name_ui_sub) self.get_element_navigate(self.driver, self.check_catalog.PARENT_CAT_IN_SUB_CAT_LISTING % name_ui) url_ui = self.driver.current_url.encode('utf-8') page_source_new = self.driver.page_source url_need = self.ENV_BASE_URL + self.path_category.URL_PATH_ROOT_CATEGORY % sub_category_id err_msg_1 = "Переход не произошел, полученный урл: %s не совпадает с целевым: %s" self.assertEqual(url_ui, url_need, err_msg_1 % (url_ui, url_need)) err_msg_2 = "Тело страницы не измненилось, переход на подкатегорию: '%s' не произошел" self.assertNotEqual(page_source, page_source_new, err_msg_2 % name_ui_sub)
def test_go_to_category_all_goods(self): """ Title: Я могу перейти на страницу выбранной Категории.Все товары, кликнув на "Все категории" в выпадающем меню выбранного раздела Description: * Проверить, что я нахожусь на странице соответствующей категории в пункте "Все товары" """ for section in self.section_tree: # Получить список категорий у которых есть подкатегории cat_id_list = self.get_categories_list(section) cat_tree = self.get_categories_tree(self.category_dict, cat_id_list) # Кликаем на раздел, чтобы открыть меню раздела xpath_section = self.xpath_section % section.localizedName section_clk_menu = self.get_element_navigate(self.driver, xpath_section, mode=None) HelpAuthCheckMethods.click_button(section_clk_menu) name_ui = section.localizedName category_id = section.categoryId # Для раздела Тороговое оборудования используется логика без переходв категорию, т.к. у него их нет if section.localizedName != "Торговое оборудование": # Получить объекты категорий меню cat_iu_list = self.get_categories(self.driver) name_ui_list = [category.text.encode('utf-8') for category in cat_iu_list] # Берем максимум 6 категорий отображаемых в меню names_ui = name_ui_list[:6] # кликаем на первую категорию name_ui = names_ui[0] xpath_category = self.xpath_category % name_ui cat_btn = self.get_element_navigate(self.driver, xpath_category, mode=None) HelpAuthCheckMethods.click_button(cat_btn) category_db = [item for item in cat_tree if item.localizedName == name_ui] category_id = category_db[0].categoryId # кликаем на ссылку в меню атегории "Все категории" all_sub_cat_btn = self.get_element_navigate(self.driver, self.click_main.ALL_SUB_CATEGORIES, mode=None) page_source = self.driver.page_source HelpAuthCheckMethods.click_button(all_sub_cat_btn) self.get_element_navigate(self.driver, self.check_catalog.ACTIVE_TREE_CATEGORY % 'Все товары') self.get_element_navigate(self.driver, self.check_catalog.PARENT_CAT_IN_SUB_CAT_LISTING % name_ui) url_ui = self.driver.current_url.encode('utf-8') page_source_new = self.driver.page_source url_need = self.ENV_BASE_URL + self.path_category.URL_ALL_IN_CATEGORY % category_id err_msg_1 = "Переход не произошел, полученный урл: %s не совпадает с целевым: %s" self.assertEqual(url_ui, url_need, err_msg_1 % (url_ui, url_need)) err_msg_2 = "Тело страницы не измненилось, переход на все подкатегории категории: '%s' не произошел" self.assertNotEqual(page_source, page_source_new, err_msg_2 % name_ui)
def click_reg_and_auth(driver): """ Нажать на кнопку Зарегистрироваться и войти. :param driver: ссылка на драйвер """ btn = Navigate.get_element_navigate(driver, Navigate.click_main.BUTTON_REG_AND_LOGIN) Front.click_button(btn)
def check_find_full_name(self, driver, user, sleep=2): self.find_user_by_name(driver, user["display_name"], sleep) user = Navigate.get_element_navigate(driver, Navigate.check_user_contact.USER_CARD_BY_ID % user["id"]) HelpAuthCheckMethods.click_button(user)
def click_tab_login(driver): """ Перейти на Вход. :param driver: ссылка на драйвер """ btn = Navigate.get_element_navigate(driver, Navigate.click_reg.TAB_LOGIN) Front.click_button(btn)
def click_tab_reg(driver): """ Перейти на Регистрацию :param driver: ссылка на драйвер """ btn = Navigate.get_element_navigate(driver, Navigate.click_auth.TAB_REG) Front.click_button(btn)
def auth_click_switch_email(driver): """ Перейти на авторизацию с помощью email :param driver: ссылка на драйвер """ btn = Navigate.get_element_navigate(driver, Navigate.click_auth.SWITCH_EMAIL) Front.click_button(btn)
def auth_click_switch_phone(driver): """ Перейти на авторизацию с помощью телефона :param driver: ссылка на драйвер """ btn = Navigate.get_element_navigate(driver, Navigate.click_auth.SWITCH_PHONE) Front.click_button(btn)