def generate_data_for_feedback(): """ Генерируем тестовые данные для отзыва :return: """ FEEDBACK_VISITOR = { 'name': 'Test_%s' % common_utils.random_string(params='letters', length=5), 'email': Reg.get_new_email(databases.db1).lower(), 'phone': str(random.randrange(70000000000, 70999999999, 1)), 'message': common_utils.random_string(params='letters', length=200), } return FEEDBACK_VISITOR
def test_edit_store_description(self): """ Title: Я могу отредактировать описание свеого магазина и сохранить изменения (Существующий пользователь.) Description: Если у меня уже заполнены данные о магазине, Я могу изменить их и сохранить изменения. Любой пользователь увидит новую информацию зайдя на страницу моего магазина. Проверить: * в БД корректно сохранилась новая информация * изменения отображаются на странице своего магазина """ # Устанавливаем новый пароль для пользователя default_new_passwd = AccountingMethods.get_default_password() hash_res_new = generate_sha256(default_new_passwd, self.user["salt"]) databases.db1.accounting.update_user_password(self.user["id"], hash_res_new) self.go_main(self.driver, phone=self.user["phone"], passwd=default_new_passwd, flag_api=False) self.get_page(self.driver, self.path_settings.URL_SHOP_INFO) self.assertIsNotNone(self.user["shop_id"], "У user_id='%s' нет идентификатора магазина" % self.user["id"]) shop_details = databases.db1.accounting.get_shop_details_by_shop_id(self.user["shop_id"])[0] self.assertIsNotNone(shop_details, "У user_id='%s' не найдено данных в таблице shop_details" % self.user["id"]) time.sleep(self.time_sleep) store = self.get_store_form(self.driver, user_id=self.user["id"], shop=shop_details) self.clear_input_row(self.driver, store["name_input"]) self.clear_input_row(self.driver, store["address_input"]) self.clear_input_row(self.driver, store["description_input"]) info_new = { 'name': common_utils.random_string(params="letters"), 'address': common_utils.random_string(length=30), 'description': common_utils.random_string(length=150) } store["name_input"].send_keys(info_new["name"]) store["address_input"].send_keys(info_new["address"]) store["description_input"].send_keys(info_new["description"]) self.click_button(store["save_btn"]) self.get_element_navigate(self.driver, self.check_settings.CHANGE_STORE_INFO_SUCCESS) self.driver.refresh() HelpProfileSettingsCheckMethods.progress(self.driver) time.sleep(self.time_sleep) self.get_store_form(self.driver, user_id=self.user["id"], shop=info_new) info_user = databases.db1.accounting.get_user_by_account_id(self.user["id"])[0] shop_id = str(info_user["shop_id"]) criteria = "shop_id=%s and name='%s' and address='%s' and description='%s'" % (shop_id, info_new["name"], info_new["address"], info_new["description"]) store_new = databases.db1.accounting.get_shop_details_by_criteria(criteria)[0] self.assertIsNotNone(store_new, "Не найдено записей в таблице shop_details по запросу %s" % criteria) self.get_store_form(self.driver, user_id=self.user["id"], shop=store_new) self.get_page(self.driver, self.path_shop.URL_SHOP % self.user["id"]) self.get_element_navigate(self.driver, self.check_shop.NAME_STORE % info_new["name"]) self.get_element_navigate(self.driver, self.check_shop.ADDRESS_STORE % info_new["address"]) self.get_element_navigate(self.driver, self.check_shop.DESCRIPTION_STORE % info_new["description"])
def test_fill_store_description(self): """ Title: Я могу заполнить описание свеого магазина и сохранить изменения. Новый пользователь. Description: Если у меня не заполнены данные о магазине, Я могу заполнить их на страниц и сохранить. Любой пользователь увидит эту информацию зайдя на страницу моего магазина. Проверить: * в БД созадалась запись о новом магазине пользователя * изменения отображаются на странице своего магазина """ self.go_to_main_page(self.driver) user = self.registration(link_db=databases.db1) store = { 'name': None, 'address': None, 'description': None } self.get_page(self.driver, self.path_settings.URL_SHOP_INFO) store = self.get_store_form(self.driver, user_id=user["id"], shop=store) info_new = { 'name': common_utils.random_string(params="letters"), 'address': common_utils.random_string(length=30), 'description': common_utils.random_string(length=150) } store["name_input"].send_keys(info_new["name"]) store["address_input"].send_keys(info_new["address"]) store["description_input"].send_keys(info_new["description"]) self.click_button(store["save_btn"]) self.get_element_navigate(self.driver, self.check_settings.CHANGE_STORE_INFO_SUCCESS) self.driver.refresh() time.sleep(self.time_sleep) HelpProfileSettingsCheckMethods.progress(self.driver) self.get_store_form(self.driver, user_id=user["id"], shop=info_new) info_user = databases.db1.accounting.get_user_by_account_id(user["id"])[0] shop_id = str(info_user["shop_id"]) criteria = "shop_id=%s and name='%s' and address='%s' and description='%s'" % (shop_id, info_new["name"], info_new["address"], info_new["description"]) store_new = databases.db1.accounting.get_shop_details_by_criteria(criteria)[0] self.assertIsNotNone(store_new, "Не найдено записей в таблице shop_details по запросу %s" % criteria) self.get_store_form(self.driver, user_id=user["id"], shop=store_new) self.get_page(self.driver, self.path_shop.URL_SHOP % user["id"]) time.sleep(self.time_sleep) self.get_element_navigate(self.driver, self.check_shop.NAME_STORE % info_new["name"]) self.get_element_navigate(self.driver, self.check_shop.ADDRESS_STORE % info_new["address"]) self.get_element_navigate(self.driver, self.check_shop.DESCRIPTION_STORE % info_new["description"])
def test_registration_by_email_incorrect_already_in_db(self): """ Title: Я не могу зарегистрироваться по e-mail, если на этот e-mail уже регистрировались ранее. Description: * Отображается сообщение "Пользователь с указанным email-адресом уже зарегистрирован" """ service_log.run(self) # Регистрация self.click_reg_and_auth(self.driver) reg_email = self.get_reg_email_form(self.driver) name = common_utils.random_string() stamp = str(time.time()) email = '*****@*****.**' % stamp password = AccountingMethods.get_default_password(5) crt = "id=%s" % AccountingMethods.get_default_user_id('seller') user = databases.db1.accounting.get_user_by_criteria_only(criteria=crt)[0] databases.db1.accounting.update_account_details_by_criteria(user["id"], "email='%s'" % email.lower()) reg_email["name_input"].send_keys(name) reg_email["email_input"].send_keys(email) reg_email["password_input"].send_keys(password) self.click_button(reg_email["reg_btn"]) self.get_element_navigate(self.driver, self.check_reg.E_ALREADY_REG_EMAIL) self.go_to_main_page(self.driver) self.check_header_widget_visitor(self.driver)
def generate_test_data_edit(self): EDIT_USER_DATA = { 'name': 'Test_%s' % common_utils.random_string(params='letters', length=10), 'gender': "MALE", 'passwd': str(random.randrange(10000, 99999, 1)), } return EDIT_USER_DATA
def test_registration_by_email_incorrect_user_disabled(self): """ Title: Я не могу зарегистрироваться по e-mail, если мой пользователь ранее был заблокирован (DISABLED) Description: Отображается соответствующее сообщение """ service_log.run(self) # Регистрация self.click_reg_and_auth(self.driver) reg_email = self.get_reg_email_form(self.driver) name = common_utils.random_string() stamp = str(time.time()) email = '*****@*****.**' % stamp password = AccountingMethods.get_default_password(5) user = databases.db1.accounting.get_user_by_criteria(account_status="DISABLED", criteria="id is not NULL")[0] databases.db1.accounting.update_account_details_by_criteria(user["id"], "email='%s'" % email.lower()) reg_email["name_input"].send_keys(name) reg_email["email_input"].send_keys(email) reg_email["password_input"].send_keys(password) self.click_button(reg_email["reg_btn"]) self.get_element_navigate(self.driver, self.check_reg.E_ALREADY_REG_EMAIL) self.go_to_main_page(self.driver) self.check_header_widget_visitor(self.driver)
def test_edit_user_profile(self): """ Title: Я могу отредактировать Имя и Пол в своем профиле. На всех моих карточках будет новое Имя. Существующий пользователь. """ # Устанавливаем новый пароль для пользователя default_new_passwd = AccountingMethods.get_default_password() hash_res_new = generate_sha256(default_new_passwd, self.user["salt"]) databases.db1.accounting.update_user_password(self.user["id"], hash_res_new) self.go_to_main_page(self.driver) self.go_main(self.driver, phone=self.user["phone"], passwd=default_new_passwd, flag_auth=True, flag_api=False) self.get_page(self.driver, self.path_settings.PATH_PROFILE_SETTINGS) profile = self.get_user_profile_form(self.driver, self.user) gender = self.get_gender_user(self.driver, self.user["gender"]) self.clear_input_row(self.driver, profile["name_input"]) new_name = common_utils.random_string() profile["name_input"].send_keys(new_name) gender_ui = self.set_gender(gender, self.user["gender"]) self.click_button(profile["save_btn"]) self.get_element_navigate(self.driver, self.check_main.WU_NAME % new_name) criteria = "gender='%s' and display_name='%s' and id=%s" % (gender_ui, new_name, self.user["id"]) user_updated = databases.db1.accounting.get_user_by_criteria_only(criteria)[0] self.driver.refresh() time.sleep(2) HelpProfileSettingsCheckMethods.progress(self.driver) self.get_user_profile_form(self.driver, user_updated) self.get_gender_user(self.driver, user_updated["gender"]) self.check_header_widget_seller_all(self.driver, user_updated)
def test_registration_by_email(self): """ Title: Регистрация пользователя. """ service_log.run(self) # Регистрация url_main = self.driver.current_url.encode('utf-8') self.click_reg_and_auth(self.driver) reg_email = self.get_reg_email_form(self.driver) name = u'Тест %s' % common_utils.random_string(length=4) email = '*****@*****.**' % str(time.time()) password = AccountingMethods.get_default_password(5) reg_email["name_input"].send_keys(name) reg_email["email_input"].send_keys(email) reg_email["password_input"].send_keys(password) self.element_click(self.driver, reg_email["reg_btn"], change_page_url=False) start_work = self.get_reg_email_success(self.driver, email.lower()) self.element_click(self.driver, start_work, change_page_url=True) work = time.time() messages = None while time.time() - work < self.email_timeout: try: messages = self.get_email(to_email=email) self.assertNotEqual(len(messages), 0, "Не получено сообщение") break except Exception: pass self.assertIsNotNone(messages, "Не получено сообщение") message = messages[0] mail_from = message['From'] mail_body = message['Body'] valid = mail_body.split(self.URL_VALIDATE_PATH) valid_hash = valid[1][:64] validate_path = self.URL_VALIDATE_EMAIL % valid_hash err_msg_1 = "Полученный урл активации емайла не найден в теле полученного письма" self.assertIn('*****@*****.**', mail_from, "Почта отправителя: %s" % mail_from) self.assertIn(validate_path, mail_body, err_msg_1) # Переход по ссылке валидации емайла self.get_page(self.driver, validate_path) url_web = self.driver.current_url.encode('utf-8') url_need = self.ENV_BASE_URL + self.path_reg.URL_VALIDATED_EMAIL err_msg = "Урл страницы успешной валидации емайла: %s не соответствует целевому урлу: %s" self.assertEqual(url_web, url_need, err_msg % (url_web, url_need)) # начать работу start_work = self.get_validated_email_success(self.driver) self.element_click(self.driver, start_work) # Проверка, что после нажатия на кнопку Начать работу произошел переход обратно на главную url_web = self.driver.current_url.encode('utf-8') err_msg = "Не произошел переход на главную страницу %s, пользователь остался на странице %s" self.assertEqual(url_web, url_main, err_msg % (url_main, url_web)) # Проверка виджета профиля self.check_menu_profile_widget_total(self.driver, name)
def generate_test_data(self): CREATE_USER_DATA = { 'name': 'Test_666_%s' % common_utils.random_string(params='letters', length=5), 'gender': "MALE", 'email': Reg.get_new_email(databases.db1).lower(), 'city': u'Москва', 'phone': str(random.randrange(70000000000, 70999999999, 1)), 'passwd': '123', } return CREATE_USER_DATA
def test_smoke_user_settings(self): """ Title: Тест сценарий изменений настроек пользователя. Description: 1) Авторизоваться пользователем 2) Перейти на страницу "Настройки" - Проверить, что отображаемые данные = тому что в базе (включая аватар) - Проверить, что Имя и Аватар отображаемом в виджете "Профиль пользователя" = тому что в базе 3) Изменить Имя пользователя и пол - Проверить что изменения отображаются и в базе и в интерфейсе 4) Изменить аватар (старый удалить) - Проверить, что отображается заглушка фото (в настройках и в профиле продавца) 5) Изменить аватар (добавить новый) - Проверить, что отображается новая фото (в настройках и в профиле продавца) """ # 1) Авторизоваться Пользователем через e-mail и проверить успешность операции. self.go_to_main_page(self.driver) self.click_reg_and_auth(self.driver) self.click_tab_login(self.driver) auth_form = self.get_auth_email_form(self.driver) auth_form["email_input"].send_keys(self.user['email']) auth_form["password_input"].send_keys(self.default_passwd) self.click_button(auth_form["login_btn"]) # Перейти на страницу "Настройки" self.get_page(self.driver, self.path_settings.PATH_PROFILE_SETTINGS) profile = self.get_user_profile_form(self.driver, self.user) gender = self.get_gender_user2(self.driver, self.user["gender"]) # Изменить Имя пользователя и пол self.clear_input_row(self.driver, profile["name_input"]) new_name = common_utils.random_string() profile["name_input"].send_keys(new_name) gender_ui = self.set_gender(gender, self.user["gender"]) self.click_button(profile["save_btn"]) # Проверяем, что изменения вступили в силу, как в БД, так и в интерфейсе criteria = "gender='%s' and display_name='%s' and id=%s" % (gender_ui, new_name, self.user["id"]) user_updated = databases.db1.accounting.get_user_by_criteria_only(criteria)[0] self.driver.refresh() Navigate.progress(self.driver) self.get_user_profile_form(self.driver, user_updated) self.get_gender_user(self.driver, user_updated["gender"]) # Изменить аватар (старый удалить) btn_avatar = self.get_delete_avatar_button(self.driver) # TODO: У пользователя уже должен быть аватар! btn_avatar.click() # Изменить аватар (добавить новый) img_path = self.IMG_AVATAR[0] add_img_btn = self.get_element_navigate(self.driver, self.click_my_goods.ADD_AVATAR) add_img_btn.click() self.add_photo(img_path) self.assertIsNotNone(self.get_delete_avatar_button(self.driver))
def test_phone_validate_length(self): """ Title: Поле поиска контактов по номеру телефона имеет маску для ввода номера телефона, не принимает больше чем 10 чисел (без +7) """ self.element_click(self.driver, self.click_user_contact.BTN_NEW_CONTACT, change_page_url=False) inp = self.get_element_navigate(self.driver, self.input_user_contact.PHONE) input_str = self.user["phone"][1:] + common_utils.random_string(params="digits", length=3) inp.send_keys(input_str) check_str = self.user["phone"][1:] self.check_input_string(self.driver, check_str)
def test_restore_by_email_link_to_restore(self): """ Title: Ссылка в письме на форму "Установите новый пароль" одноразовая. Description: * Если попытаться пройти по ней во второй раз, отображается сообщение "Истек срок действия активационной ссылки, повторите активацию еще раз" """ service_log.run(self) self.email = self.get_new_email(databases.db1) databases.db1.accounting.update_account_details_by_criteria(self.default_user_id, "email='%s'" % self.email.lower()) url_main = self.driver.current_url.encode('utf-8') self.get_page(self.driver, self.path_restore.URL_RESTORE_EMAIL) # Ввод емайл для восстановления пароля и клик Выслать пароль restore_form = self.get_restore_email_form(self.driver) restore_form["email_input"].send_keys(self.email) self.element_click(self.driver, restore_form["restore_btn"], change_page_url=False) time.sleep(self.time_sleep) # Проверка, что в БД появилась запись о письме и статус письма # Проверка что сформирован хеш для подтеврждения емайл при регистрации criteria = "auth_type='PASSWORD_CHANGE' and account_details_id=%s" % self.user["id"] auth_user = databases.db1.accounting.get_auths_criteria(criteria)[0] err_msg = "Из БД не получено записей о формировании хеша восстановления пароля по емайлу для user_id=%s" self.assertIsNotNone(auth_user, err_msg % self.user["id"]) # Проверка статуса отправленного сообщения email_statuses = databases.db6.accounting.get_email_statuses_by_email(self.email.lower())[0] #self.assertEqual(email_statuses["status_id"], 2, "Сообщение не доставлено на mail=%s" % self.email) # Проверка отправленного сообщения и ссылки для завершения регистрации hash_value = auth_user["code_value"] emails = databases.db6.accounting.get_emails_by_hash(hash_value)[0] err_msg_1 = "Из БД не получено писем о восстановлении пароля с хешом=%s, для user_id=%s" self.assertIsNotNone(emails, err_msg_1 % (hash_value, self.user["id"])) restore_path = self.URL_RESTORE_EMAIL % hash_value url_validate = self.ENV_BASE_URL + restore_path # Переход по ссылке валидации емайла self.get_page(self.driver, restore_path) url_web = self.driver.current_url.encode('utf-8') err_msg = "Урл страницы ввода нового пароля из письма: %s не соответствует целевому урлу: %s" self.assertEqual(url_web, url_validate, err_msg % (url_web, url_validate)) self.get_restore_email_input_pass_form(self.driver, self.email) # Проверка формы ввода нового пароля и ввод input_pass_form = self.get_restore_email_input_pass_form(self.driver, self.email) new_password = common_utils.random_string() input_pass_form["password_input"].send_keys(new_password) input_pass_form["password_repeat_input"].send_keys(new_password) self.element_click(self.driver, input_pass_form["set_pass_btn"], change_page_url=False) self.driver.delete_all_cookies() # Повторный переход по ссылке валидации емайла self.get_page(self.driver, restore_path) self.element_is_present(self.driver, self.check_restore.ERR_VALIDATE_URL)
def test_select_all_delivery(self): """ Title: Я могу включить все доступные варианты доставки. Любой посетитель увидит их на карточке любого моего товара. Description: * проверить, сохранение изменений в ui * проверить сохранение данных в Бд * проверить отображение всех включенных вариантов доставки на карточке любого своего товара. """ text_tk = "SDEK, B2C, RZD, %s" % common_utils.random_string() text_courier = "Moscow, %s" % common_utils.random_string() text_pickup = "Moscow, %s" % common_utils.random_string() self.get_page(self.driver, self.path_settings.URL_DELIVERY_INFO) delivery_db = databases.db1.accounting.get_delivery_details_by_user_id(self.user["id"]) err_msg_1 = "У пользователя есть активные варианты доставки: %s. Метод setUp отработал некорректно" self.assertEqual(len(delivery_db), 0, err_msg_1 % delivery_db) delivery_info = self.get_status_delivery_options(delivery_db) time.sleep(self.time_sleep) delivery = self.get_delivery_form(self.driver, delivery_info) self.change_all_delivery_options(self.driver, delivery_info, drop=False) delivery["tk_input"].send_keys(text_tk) delivery["courier_input"].send_keys(text_courier) delivery["pickup_input"].send_keys(text_pickup) self.click_button(delivery["save_btn"]) self.element_is_present(self.driver, self.check_settings.CHANGE_DELIVERY_SUCCESS) delivery_db_updated = databases.db1.accounting.get_delivery_details_by_user_id(self.user["id"]) err_msg = "В БД добавлено только %s записей, вместо 5" self.assertEqual(len(delivery_db_updated), 5, err_msg % len(delivery_db_updated)) self.driver.refresh() HelpProfileSettingsCheckMethods.progress(self.driver) delivery_info_updated = self.get_status_delivery_options(delivery_db_updated) time.sleep(self.time_sleep) self.get_delivery_form(self.driver, delivery_info_updated) # переход на страницу магазина и в товар self.get_page(self.driver, self.path_shop.URL_SHOP % self.user["id"]) obj_good = self.get_element_navigate(self.driver, self.click_shop.GOOD % 1) good_name = obj_good.text.encode('utf-8') self.click_button(obj_good) self.get_element_navigate(self.driver, self.check_good.NAME_GOOD % good_name) # Проверка блока Варианты доставки на странице товара self.check_all_delivery_options_in_good(self.driver, text_tk, text_courier, text_pickup)
def create_request(method, params, ensure_ascii=False, dump=True): """ Создаём окончательный запрос в формате JSON. :param method: type(str) - наименование метода к которому посылается запрос :param params: type(dict) - параметры json-запроса """ params = {"jsonrpc": "2.0", "method": method, "params": params, "id": common_utils.random_string(params="digits", length=10)} if dump is True: return json.dumps(params, ensure_ascii=ensure_ascii) else: return params
def setUp(cls): # Подготовка работы с selenium cls.driver = HelpLifeCycleCheckMethods.get_driver() cls.go_to_main_page(cls.driver) # Подготовка тестовых данных cls.name = common_utils.random_string() stamp = str(time.time()) cls.email = '*****@*****.**' % stamp cls.password = AccountingMethods.get_default_password(5) # Переход на страницу регистрации по емайл cls.click_reg_and_auth(cls.driver) cls.reg_email = cls.get_reg_email_form(cls.driver) service_log.preparing_env(cls)
def test_as_buyer_to_chat(self, test_good=HelpNavigateCheckMethods.SHP_TO_GOOD): """ Title: Написать текст от покупателя продавцу по поводу его активного товара и перейти в чат с ним. Description: Я, как Покупатель, могу написать продавцу сообщение по Активному товару, нажав на "Связаться с продавцом" и ввести свой текст. После этого я могу перейти в чат с продавцом (...) """ databases.db1.accounting.update_account_details_by_criteria(self.default_user_id, "locale='ru'") self.user = databases.db1.accounting.get_user_by_account_id(self.default_user_id)[0] self.shop = databases.db1.accounting.get_shop_details_by_shop_id(self.user["shop_id"])[0] AccountingMethods.save_user_password(user_id=self.user["id"], hash_passwd=self.user["code_value"]) # Устанавливаем новый пароль для пользователя self.default_new_passwd = AccountingMethods.get_default_password() hash_res_new = generate_sha256(self.default_new_passwd, self.user["salt"]) databases.db1.accounting.update_user_password(self.user["id"], hash_res_new) self.go_main(self.driver, phone=self.user["phone"], passwd=self.default_new_passwd, flag_auth=True) self.get_page(self.driver, self.path_shop.URL_SHOP % self.default_seller_id) self.check_navigate_in_good_page(self.driver, test_good, random.randrange(1, 10, 1)) self.data_good, good_str = self.get_good_data(self.driver) btn_to_call = self.get_element_navigate(self.driver, self.click_good.BTN_CALL_SELLER) self.click_button(btn_to_call) # ищем товар с нужным id obj_good = self.get_element_navigate(self.driver, self.click_good.GOOD_BY_ID_POPUP % self.data_good['good_id']) self.check_express_card_good(obj_good, good_str) # проверяем фото товара self.get_element_navigate(self.driver, (self.click_good.GOOD_BY_ID_POPUP % self.data_good['good_id']) + (self.path_category.PATH_IMG % self.data_good['image'])) # Проверка текста в попапе popup_text = self.get_element_navigate(self.driver, self.check_good.POPUP_MSG_FROM_GOOD % '') Settings.clear_input_row(self.driver, popup_text) text = common_utils.random_string(length=50) popup_text.send_keys(text) obj_send = self.get_element_navigate(self.driver, self.click_good.BTN_SEND) self.click_button(obj_send) # После отправки сообщения отображается окно "Сообщение отправлено" btn_to_good, btn_to_chat = self.get_sent_success_btn(self.driver) self.click_button(btn_to_chat) # После нажатия на "Перейти в чат" я перехожу на страницу чата с данным продавцом self.assertEqual(self.ENV_BASE_URL + self.path_chat.URL_CHAT_WITH_USER % self.default_seller_id, self.driver.current_url) # В чате с продавцом есть отправленное от меня сообщение и карточка товара. Проверить соответствие текста и товара. last_msg = self.get_last_msg(self.driver) self.assertIn(good_str, last_msg, "Экспресс карточка='%s' не совпадает с последним сообщением='%s'" % (good_str, last_msg)) str_msg_to_good = self.TEXT_MSG_TO_GOOD.replace(' ', '') self.assertIn(text, last_msg, "Свое сообщение о товаре='%s' не совпадает с последним " "сообщением='%s'" % (str_msg_to_good, last_msg))
def test_only_users_found(self): """ Title: Если по запросу поиска не найдено товаров, но найдены пользователи - то отображается соответствующая заглушка. Description: * Текст заглушки "По запросу %запрос% товаров не найдено. Зато мы нашли [n] пользователей по этому запросу" * Счетчик кол-ва товаров равен нулю. * Я могу перейти на вкладку "Пользователи" по кнопке "Смотреть пользователей" """ service_log.run(self) # Берем тестового продавца на магазине которого будут проводиться проверки test_seller_id = AccountingMethods.get_default_user_id(role='seller') user = databases.db1.accounting.get_user_by_account_id(test_seller_id)[0] # Подготавливаем тестовое мия test_name = common_utils.random_string(length=20) AccountingMethods.save_user_password(user_id=user["id"], hash_passwd=user["code_value"], salt=user["salt"]) # Устанавливаем новый пароль для пользователя 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_main(self.driver, phone=user["phone"], passwd=default_new_passwd, flag_auth=True) # Переход на настройки пользователя и изменение имени на тестовое self.get_page(self.driver, self.path_settings.PATH_PROFILE_SETTINGS) # Получаем объекты input оформ display_name = self.get_obj_input(self.driver, user["display_name"], path_block=self.path_settings.PATH_COMMON_INFO, path_input=self.input_settings.FORM_DISPLAY_NAME) self.clear_input_row(self.driver, display_name) # Очистка введенных данных из input форм display_name.send_keys(test_name) # Ввод тестовых данных # Получаем объект кнопки Сохранить и нажимаем Сохранить common_info_submit = self.get_submit_button(self.driver, self.path_settings.PATH_COMMON_INFO) self.element_click(self.driver, common_info_submit, change_page_url=False) self.go_to_main_page(self.driver) u_user = databases.db1.accounting.get_user_by_account_id(test_seller_id)[0] s_form = self.search_form(self.driver) self.input_str(s_form["input"], string=test_name) self.element_click(self.driver, s_form["btn"], change_page_url=True) l_menu = self.left_menu(self.driver) self.assertEqual(int(l_menu['count_goods']), 0, "Количество товаров не 0") self.assertEqual(int(l_menu['count_users']), 1, "Количество пользователей не 1") only_users_form = self.found_only_users(self.driver, test_name) self.element_click(self.driver, only_users_form['btn_to_users']) self.search_by_user(self.driver, u_user, l_menu['count_users'])
def test_as_buyer_cancel_msg(self, test_good=HelpNavigateCheckMethods.SHP_TO_GOOD): """ Title: Я, как Покупатель, могу не Связываться с продавцом, выбрав Отменить, на форме ввода текста сообщения """ databases.db1.accounting.update_account_details_by_criteria(self.default_user_id, "locale='ru'") self.user = databases.db1.accounting.get_user_by_account_id(self.default_user_id)[0] self.shop = databases.db1.accounting.get_shop_details_by_shop_id(self.user["shop_id"])[0] AccountingMethods.save_user_password(user_id=self.user["id"], hash_passwd=self.user["code_value"]) # Устанавливаем новый пароль для пользователя self.default_new_passwd = AccountingMethods.get_default_password() hash_res_new = generate_sha256(self.default_new_passwd, self.user["salt"]) databases.db1.accounting.update_user_password(self.user["id"], hash_res_new) self.go_main(self.driver, phone=self.user["phone"], passwd=self.default_new_passwd, flag_auth=True) self.get_page(self.driver, self.path_shop.URL_SHOP % self.default_seller_id) self.check_navigate_in_good_page(self.driver, test_good, 1) self.data_good, good_str = self.get_good_data(self.driver) btn_to_call = self.get_element_navigate(self.driver, self.click_good.BTN_CALL_SELLER) self.click_button(btn_to_call) # ищем товар с нужным id obj_good = self.get_element_navigate(self.driver, self.click_good.GOOD_BY_ID_POPUP % self.data_good['good_id']) self.check_express_card_good(obj_good, good_str) # проверяем фото товара good = (self.click_good.GOOD_BY_ID_POPUP % self.data_good['good_id']) img = (self.path_category.PATH_IMG % self.data_good['image']) self.get_element_navigate(self.driver, good + img) # Проверка текста в попапе popup_text = self.element_is_present(self.driver, self.check_good.POPUP_MSG_FROM_GOOD % '') Settings.clear_input_row(self.driver, popup_text) text = common_utils.random_string(length=50) popup_text.send_keys(text) obj_cancel = self.element_is_present(self.driver, self.click_good.BTN_CANCEL_CALL) self.click_button(obj_cancel) #После нажатия на "Отмена" я остаюсь на карточке этого же товара data_url = self.driver.current_url[self.driver.current_url.rfind('/') + 1:].encode('utf-8') self.assertIn(self.data_good["good_id"], data_url) # В чате с продавцом есть отправленное от меня сообщение и карточка товара. Проверить соответствие. self.get_page(self.driver, self.path_chat.URL_CHAT_WITH_USER % self.default_seller_id) last_msg = self.get_last_msg(self.driver) msg = "Свое сообщение о товаре='%s' совпадает с последним сообщением='%s'" % (text, last_msg) self.assertNotIn(text, last_msg, msg)
def test_select_all_payments(self): """ Title: Я могу включить все доступные варианты оплаты. Любой посетитель увидит их на карточке любого моего товара. Description: * проверить, сохранение изменений в ui * проверить сохранение данных в Бд * проверить отображение всех включенных вариантов оплаты на карточке любого своего товара. """ text_card = "Visa, Master Card, %s" % common_utils.random_string() text_e_money = "Webmoney, Bitcoint, %s" % common_utils.random_string() self.get_page(self.driver, self.path_settings.URL_PAYMENT_INFO) payment_db = databases.db1.accounting.get_payment_details_by_user_id(self.user["id"]) err_msg_1 = "У пользователя есть активные варианты оплаты: %s. Метод setUp отработал некорректно" self.assertEqual(len(payment_db), 0, err_msg_1 % payment_db) payment_info = self.get_status_payment_options(payment_db) payments = self.get_payment_form(self.driver, payment_info) self.change_all_payment_options(self.driver, payment_info, drop=False) payments["card_input"].send_keys(text_card) payments["e_money_input"].send_keys(text_e_money) self.click_button(payments["save_btn"]) self.element_is_present(self.driver, self.check_settings.CHANGE_PAYMENTS_SUCCESS) payment_db_updated = databases.db1.accounting.get_payment_details_by_user_id(self.user["id"]) err_msg = "В БД добавлено только %s записей, вместо 5" self.assertEqual(len(payment_db_updated), 5, err_msg % len(payment_db_updated)) self.driver.refresh() HelpProfileSettingsCheckMethods.progress(self.driver) payment_info_updated = self.get_status_payment_options(payment_db_updated) self.get_payment_form(self.driver, payment_info_updated) # переход на страницу магазина и в товар self.get_page(self.driver, self.path_shop.URL_SHOP % self.user["id"]) obj_good = self.get_element_navigate(self.driver, self.click_shop.GOOD % 1) good_name = obj_good.text.encode('utf-8') self.click_button(obj_good) self.get_element_navigate(self.driver, self.check_good.NAME_GOOD % good_name) # Проверка блока Варианты оплаты на странице товара self.check_all_payment_options_in_good(self.driver, text_card, text_e_money)
def create_request(method, params, ensure_ascii=False, dump=True): """ Создаём окончательный запрос в формате JSON. :param method: type(str) - наименование метода к которому посылается запрос :param params: type(dict) - параметры json-запроса """ params = { "jsonrpc": "2.0", "method": method, "params": params, "id": common_utils.random_string(params="digits", length=10) } if dump is True: return json.dumps(params, ensure_ascii=ensure_ascii) else: return params
def test_authorization_by_email_incorrect_password(self): """ Title: Я не могу войти в систему, введя корректный e-mail и неверный пароль. Description: * Отображается соответствующее сообщение """ service_log.run(self) self.click_reg_and_auth(self.driver) self.click_tab_login(self.driver) auth_form = self.get_auth_email_form(self.driver) auth_form["email_input"].send_keys(self.email) auth_form["password_input"].send_keys(self.default_new_passwd + common_utils.random_string()) self.click_button(auth_form["login_btn"]) self.get_element_navigate(self.driver, self.check_auth.ERR_CHECK_EMAIL_AND_PASS) self.go_to_main_page(self.driver) self.check_header_widget_visitor(self.driver)
def test_only_goods_found(self): """ Title: Если по запросу поиска не найдено пользователей, но найдены товары- то отображается соответствующая заглушка (...) Description: * Текст заглушки "По запросу %запрос% пользователей не найдено. Зато мы нашли [n] товаров по этому запросу" * Счетчик кол-ва пользователей равен нулю. * Я могу перейти на вкладку "Товары" по кнопке "Смотреть товары" """ service_log.run(self) service_log.run(self) # Берем тестового продавца на магазине которого будут проводиться проверки test_seller_id = AccountingMethods.get_default_user_id(role='seller') user = databases.db1.accounting.get_user_by_account_id(test_seller_id)[0] # Подготавливаем тестовое мия test_name = common_utils.random_string(length=20) AccountingMethods.save_user_password(user_id=user["id"], hash_passwd=user["code_value"], salt=user["salt"]) # Устанавливаем новый пароль для пользователя 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_main(self.driver, phone=user["phone"], passwd=default_new_passwd, flag_auth=True) good = databases.db1.warehouse.get_wares_by_criteria(criteria="shop_id=%s and stock_state_id=2" % user['id'])[0] # Переход на едактирование товара и изменение названия на тестовое self.get_page(self.driver, self.path_my_goods.URL_EDIT_GOOD % good['ware_id']) # Получаем объекты input оформ display_name = self.element_is_present(self.driver, self.input_my_goods.ADD_GOOD_NAME) self.clear_input_row(self.driver, display_name) # Очистка введенных данных из input форм display_name.send_keys(test_name) # Ввод тестовых данных # Получаем объект кнопки Сохранить и нажимаем Сохранить self.element_click(self.driver, self.click_my_goods.ADD_GOOD_BTN_PUBLISH, change_page_url=True) self.go_to_main_page(self.driver) u_good = databases.db1.warehouse.get_wares_by_criteria(criteria="ware_id='%s'" % good['ware_id'])[0] s_form = self.search_form(self.driver) self.input_str(s_form["input"], string=test_name) self.element_click(self.driver, s_form["btn"], change_page_url=True) l_menu = self.left_menu(self.driver) self.assertEqual(int(l_menu['count_goods']), 1, "Количество товаров не 1") self.assertEqual(int(l_menu['count_users']), 0, "Количество пользователей не 0") self.element_click(self.driver, l_menu['users']) only_users_form = self.found_only_goods(self.driver, test_name) self.element_click(self.driver, only_users_form['btn_to_goods']) self.search_by_good(self.driver, u_good, l_menu['count_goods'])
def test_on_request_none_found(self): """ Title: Если по запросу поиска не найдено ни товаров, ни пользователей - то отображается соответствующая заглушка. Description: * Текст заглушки "По запросу %запрос% пользователей и товаров не найдено Пожалуйста, проверьте правильность написания или воспользуйтесь каталогом" * Счетчики кол-ва товаров и кол-ва пользователей по нулям * Я могу перейти в каталог по кнопке "Перейти в каталог" """ service_log.run(self) s_form = self.search_form(self.driver) test_str = common_utils.random_string(length=20) self.input_str(s_form["input"], string=test_str) self.element_click(self.driver, s_form["btn"], change_page_url=True) l_menu = self.left_menu(self.driver) self.assertEqual(int(l_menu['count_goods']), 0, "Количество товаров не 0") self.assertEqual(int(l_menu['count_users']), 0, "Количество пользователей не 0") none_form = self.none_found(self.driver, test_str) self.element_click(self.driver, none_form['btn_catalog'], change_page_url=True)
def test_seller_card_for_visitor(self): """ Title: Проверка карточки продавца на странице поиска для посетителя """ self.go_main(self.driver, phone=self.user["phone"], passwd=self.default_new_password, flag_auth=True) self.get_page(self.driver, self.path_settings.PATH_PROFILE_SETTINGS) profile = Settings.get_user_profile_form(self.driver, self.user) Settings.clear_input_row(self.driver, profile["name_input"]) new_name = common_utils.random_string() profile["name_input"].send_keys(new_name) self.element_click(self.driver, profile["save_btn"], change_page_url=False) time.sleep(self.timeout) self.driver.delete_all_cookies() self.go_to_main_page(self.driver) u_user = databases.db1.accounting.get_user_by_criteria(account_status='ENABLED', criteria='id=%s' % self.default_test_id)[0] self.search_user(self.driver, u_user['display_name']) self.check_user_card_in_search_page(self.driver, u_user)
def test_fill_user_profile(self): """ Title: Я могу отредактировать Имя и Пол в своем профиле. На всех моих карточках будет новое Имя. Новый пользователь. """ self.go_to_main_page(self.driver) user = self.registration(link_db=databases.db1) self.get_page(self.driver, self.path_settings.PATH_PROFILE_SETTINGS) profile = self.get_user_profile_form(self.driver, user) gender = self.get_gender_user(self.driver, user["gender"]) self.clear_input_row(self.driver, profile["name_input"]) new_name = common_utils.random_string() profile["name_input"].send_keys(new_name) gender_ui = self.set_gender(gender, user["gender"]) self.click_button(profile["save_btn"]) self.get_element_navigate(self.driver, self.check_main.WU_NAME % new_name) criteria = "gender='%s' and display_name='%s' and id=%s" % (gender_ui, new_name, user["id"]) user_updated = databases.db1.accounting.get_user_by_criteria_only(criteria)[0] self.driver.refresh() time.sleep(2) HelpProfileSettingsCheckMethods.progress(self.driver) self.get_user_profile_form(self.driver, user_updated) self.get_gender_user(self.driver, user_updated["gender"]) self.check_header_widget_seller_all(self.driver, user_updated)
def test_change_password(self): """ Title: Я могу сменить свой пароль, на новый. После этого я не смогу войти под старым, но смогу под новым """ # Устанавливаем новый пароль для пользователя default_new_passwd = AccountingMethods.get_default_password() hash_res_new = generate_sha256(default_new_passwd, self.user["salt"]) databases.db1.accounting.update_user_password(self.user["id"], hash_res_new) self.go_to_main_page(self.driver) self.go_main(self.driver, phone=self.user["phone"], passwd=default_new_passwd, flag_api=False) new_password = common_utils.random_string(length=6) self.get_page(self.driver, self.path_settings.URL_CHANGE_PASSWORD) pass_form = self.get_password_form(self.driver) pass_form["password_input"].send_keys(default_new_passwd) pass_form["new_password_input"].send_keys(new_password) pass_form["repeat_password_input"].send_keys(new_password) self.click_button(pass_form["save_btn"]) self.get_element_navigate(self.driver, self.check_settings.CHANGE_PASSWORD_SUCCESS) time.sleep(4) menu = self.get_element_navigate(self.driver, self.check_main.CHECK_MENU_USER) self.element_click(self.driver, menu, change_page_url=False) exit_btn = self.get_element_navigate(self.driver, self.click_main.MENU_PROFILE_EXIT) self.element_click(self.driver, exit_btn) # self.click_to_phone(self.driver) obj_phone, obj_password, obj_submit_button = self.get_data_authorization(self.driver) # Вводим данные на авторизацию self.send_phone(phone_object=obj_phone, phone_number=self.user["phone"]) self.send_password(password_object=obj_password, password_number=new_password) # Нажатие на кнопку авторизации self.element_click(self.driver, obj_submit_button) self.check_header_widget_seller(self.driver, self.user["id"])
def test_fill_store_requisites(self): """ Title: Я могу заполнить реквизиты компании и сохранить изменения. Новый пользователь. Description: Блок "О компании" и "Банковские реквизиты" Проверить: * в БД сохранились данные * изменения отображаются на странице задания реквизитов """ self.go_to_main_page(self.driver) self.user = self.registration(link_db=databases.db1) self.get_page(self.driver, self.path_settings.URL_COMPANY_DETAILS) details = self.get_details_form(self.driver, self.user) self.clear_input_row(self.driver, details["legal_name_input"]) self.clear_input_row(self.driver, details["inn_input"]) self.clear_input_row(self.driver, details["kpp_input"]) self.clear_input_row(self.driver, details["ogrn_input"]) self.clear_input_row(self.driver, details["legal_address_input"]) self.clear_input_row(self.driver, details["real_address_input"]) self.clear_input_row(self.driver, details["bik_input"]) self.clear_input_row(self.driver, details["name_bank_input"]) self.clear_input_row(self.driver, details["account_input"]) self.clear_input_row(self.driver, details["correspondent_input"]) details_new = { 'legal_name': common_utils.random_string(params="russian"), 'inn': common_utils.random_string(params='digits', length=12), 'kpp': common_utils.random_string(params='digits', length=9), 'ogrn': common_utils.random_string(params='digits', length=13), 'legal_address': common_utils.random_string(params="russian", length=30), 'real_address': common_utils.random_string(params="russian", length=35), 'bik': common_utils.random_string(params='digits', length=9), 'name_bank': common_utils.random_string(params="russian", length=30), 'account': common_utils.random_string(params='digits', length=20), 'correspondent': common_utils.random_string(params='digits', length=20), } details["legal_name_input"].send_keys(details_new["legal_name"]) details["inn_input"].send_keys(details_new["inn"]) details["kpp_input"].send_keys(details_new["kpp"]) details["ogrn_input"].send_keys(details_new["ogrn"]) details["legal_address_input"].send_keys(details_new["legal_address"]) details["real_address_input"].send_keys(details_new["real_address"]) details["bik_input"].send_keys(details_new["bik"]) details["name_bank_input"].send_keys(details_new["name_bank"]) details["account_input"].send_keys(details_new["account"]) details["correspondent_input"].send_keys(details_new["correspondent"]) self.click_button(details["save_btn"]) err_msg = "Не появилось сообщение об успешном сохранении." self.element_is_present(self.driver, self.check_settings.CHANGE_STORE_INFO_SUCCESS) self.driver.refresh() HelpProfileSettingsCheckMethods.progress(self.driver) criteria_1 = "legal_name='%s' and inn='%s' and kpp='%s' and ogrn='%s' and " criteria_2 = "legal_address='%s' and actual_address='%s' and bank_bic='%s' and " criteria_3 = "bank_name_and_address='%s' and bank_account='%s' and bank_correspondent_account='%s'" legal_name = details_new["legal_name"].encode('utf-8') legal_address = details_new["legal_address"].encode('utf-8') real_address = details_new["real_address"].encode('utf-8') name_bank = details_new["name_bank"].encode('utf-8') crt_1 = criteria_1 % (legal_name, details_new["inn"], details_new["kpp"], details_new["ogrn"]) crt_2 = criteria_2 % (legal_address, real_address, details_new["bik"]) crt_3 = criteria_3 % (name_bank, details_new["account"], details_new["correspondent"]) criteria = crt_1 + crt_2 + crt_3 user_updated = databases.db1.accounting.get_user_by_criteria_only(criteria)[0] self.assertIsNotNone(user_updated, "Не найдено записей в таблице account_details по запросу %s" % criteria) self.get_details_form(self.driver, user_updated)
def test_restore_by_email_correct(self): """ Title: Я могу восстановить пароль, введя свой e-mail, на который зарегистрирован аккаунт Description: 1. Ввести корректный зарегистрированный номер e-mail в нажать "Выслать пароль" * отображается страница с информационным сообщением о том, что ссылка на сброс пароля высланы письмом * при нажатии на главную выполнен переход на главную страницу * на указанный e-mail отправлено письмо с сылкой на страницу смены пароля (кнопка "Сбросить пароль") 2. Получив письмо, нажать на "Сбросить пароль" * выполнен переход на страницу сервиса \reset-password?token= [специально_сгенерированный_уникальный_токен_одноразового_перехоа_по_ссылке] * форма содержит поля "Эл. почта", "Пароль" и "Повторите пароль" и кнопку "Установить новый пароль" * поле "Эл. почта" заблокировано для изменения и содержит email аккаунта для которого восстанавливали пароль 3. Ввести новый пароль на форме "Установить новый пароль" и подтверждение и нажать "Установить новый пароль": * отображается страница с сообщением, что новый пароль установлен и кнопкой "Начать работу" * в БД для пользователя записывается новый пароль = вводимому на предыдущем шаге (хеш пароля). * статус пользователя и другие данные (кроме пароля) не меняется 4. Нажать "Начать работу" * Происходит успешный вход в систему под учетной записью, для которой восстанавливали пароль. * Проверить что под ней можно снова войти после логаута из системы """ service_log.run(self) self.email = self.get_new_email(databases.db1) databases.db1.accounting.update_account_details_by_criteria(self.default_user_id, "email='%s'" % self.email.lower()) url_main = self.driver.current_url.encode('utf-8') self.get_page(self.driver, self.path_restore.URL_RESTORE_EMAIL) # Ввод емайл для восстановления пароля и клик Выслать пароль restore_form = self.get_restore_email_form(self.driver) restore_form["email_input"].send_keys(self.email) self.element_click(self.driver, restore_form["restore_btn"], change_page_url=False) # Проверка, что в БД появилась запись о письме и статус письма # Проверка что сформирован хеш для подтеврждения емайл при регистрации criteria = "auth_type='PASSWORD_CHANGE' and account_details_id=%s" % self.user["id"] auth_user = databases.db1.accounting.get_auths_criteria(criteria)[0] err_msg = "Из БД не получено записей о формировании хеша восстановления пароля по емайлу для user_id=%s" self.assertIsNotNone(auth_user, err_msg % self.user["id"]) # Проверка статуса отправленного сообщения email_statuses = databases.db6.accounting.get_email_statuses_by_email(self.email.lower())[0] #self.assertEqual(email_statuses["status_id"], 2, "Сообщение не доставлено на mail=%s" % self.email) # Проверка отправленного сообщения и ссылки для завершения регистрации hash_value = auth_user["code_value"] emails = databases.db6.accounting.get_emails_by_hash(hash_value)[0] err_msg_1 = "Из БД не получено писем о восстановлении пароля с хешом=%s, для user_id=%s" self.assertIsNotNone(emails, err_msg_1 % (hash_value, self.user["id"])) restore_path = self.URL_RESTORE_EMAIL % hash_value url_validate = self.ENV_BASE_URL + restore_path url_validate_path = url_validate[url_validate.find('//')+2:] err_msg_url = "Полученный урл восстановления пароля по емайлу %s не найден в теле отправленного письма id=%s" self.assertIn(url_validate_path, emails["body"], err_msg_url % (url_validate, emails["id"])) # Проверка страницы На ваш эл. ящик выслано письмо email_sent_form = self.get_restore_email_sent_form(self.driver) self.element_click(self.driver, email_sent_form["to_main_btn"]) # Проверка, что после нажатия на кнопку На главную произошел переход обратно на главную url_web = self.driver.current_url.encode('utf-8') err_msg = "Не произошел переход на главную страницу %s, пользователь остался на странице %s" self.assertEqual(url_web, url_main, err_msg % (url_main, url_web)) self.get_element_navigate(self.driver, self.check_main.MAIN_MENU_HOME_ACTIVE) work = time.time() messages = None while time.time() - work < self.email_timeout: try: messages = self.get_email(to_email=self.email) self.assertNotEqual(len(messages), 0, "Не получено сообщение") break except Exception: pass self.assertIsNotNone(messages, "Не получено сообщение") message = messages[0] mail_from = message['From'] mail_body = message['Body'] err_msg_url_1 = "Полученный урл восстановления пароля по емайл %s не найден в теле полученного письма id=%s" #self.assertEqual(mail_subject, 'OORRAA.com - сброс пароля', "Тема письма: %s" % mail_subject) self.assertIn('*****@*****.**', mail_from, "Почта отправителя: %s" % mail_from) self.assertIn(url_validate_path, mail_body, err_msg_url_1 % (url_validate, mail_body)) # Переход по ссылке валидации емайла self.get_page(self.driver, restore_path) url_web = self.driver.current_url.encode('utf-8') err_msg = "Урл страницы ввода нового пароля из письма: %s не соответствует целевому урлу: %s" self.assertEqual(url_web, url_validate, err_msg % (url_web, url_validate)) # Проверка формы ввода нового пароля и ввод input_pass_form = self.get_restore_email_input_pass_form(self.driver, self.email) new_password = common_utils.random_string() input_pass_form["password_input"].send_keys(new_password) input_pass_form["password_repeat_input"].send_keys(new_password) self.element_click(self.driver, input_pass_form["set_pass_btn"], change_page_url=False) # Проверка что хеш пароля изменился и статус пользователя не изменился user_new = databases.db1.accounting.get_user_by_criteria_only("id=%s" % self.default_user_id)[0] self.assertNotEqual(self.user['code_value'], user_new['code_value'], "Хеш нового пароля совпадает со старым") err = "Статус аккаунта пользователя изменился на %s" self.assertEqual(self.user['account_status'], user_new['account_status'], err % user_new['account_status']) # Проверка, что из БД удален активационный хеш crt = "auth_type='PASSWORD_CHANGE' and account_details_id=%s and creation_timestamp=%s" a_user = databases.db1.accounting.get_auths_criteria(crt % (self.user["id"], auth_user["creation_timestamp"])) err_msg = "Из БД не удалена запись о формировании хеша восстановления пароля для user_id=%s" self.assertEqual(a_user, list(), err_msg % self.user["id"]) start_work = self.get_restore_password_by_email_success(self.driver) self.element_click(self.driver, start_work["start_work_btn"]) time.sleep(self.time_sleep) # Проверка, что после нажатия на кнопку Начать работу произошел переход обратно на главную url_web = self.driver.current_url.encode('utf-8') err_msg = "Не произошел переход на главную страницу %s, пользователь остался на странице %s" self.assertEqual(url_web, url_main, err_msg % (url_main, url_web)) self.get_element_navigate(self.driver, self.check_main.MAIN_MENU_HOME_ACTIVE) # Проверка виджета продавца self.check_header_widget_seller_all(self.driver, self.user) exit_btn = self.get_element_navigate(self.driver, self.click_main.MENU_PROFILE_EXIT) self.element_click(self.driver, exit_btn, change_page_url=False) # Проверка успешного логина с новым паролем self.go_authorization_page(self.driver) auth_form = self.get_auth_email_form(self.driver) auth_form["email_input"].send_keys(self.email) auth_form["password_input"].send_keys(new_password) self.element_click(self.driver, auth_form["login_btn"]) time.sleep(self.time_sleep) self.check_header_widget_seller_all(self.driver, self.user)
def test_registration_by_email_correct(self, new_messages=2): """ Title: Я могу зарегистрироваться по e-mail Description: 1. Заполнить форму регистрации, указав имя, корректный адрес почты и пароль, нажать "Зарегистрироваться" * Отображается страница "Регистрация завершена" * Проверить содержимое страницы (текст и иконку) * Проверить наличие кнопки "Начать работу" * В базу сохранен новый пользователь, с введенным им паролем. Статус пользователя: "Активный", роль Продавец. 2. Нажать на кнопку "Начать работу" * Произошел вход в систему под созданной учетной записью, в профиле (справа-сверху) корректно отображается имя пользователя в соответствии с созданным * на странице настроек профиля корректно отображается информация в соответствии с введеным при регистрации (сразу после создания отображается, e-mail, роль и имя) * Проверить наличие двух сообщений в мессенджере. 3. Проверить что на введенный при регистрации e-mail пришло подтверждающее письмо """ service_log.run(self) # Регистрация url_main = self.driver.current_url.encode('utf-8') self.click_reg_and_auth(self.driver) reg_email = self.get_reg_email_form(self.driver) name = common_utils.random_string() email = self.get_new_email(databases.db1) password = AccountingMethods.get_default_password(5) reg_email["name_input"].send_keys(name) reg_email["email_input"].send_keys(email) reg_email["password_input"].send_keys(password) self.element_click(self.driver, reg_email["reg_btn"], change_page_url=False) crt = "display_name='%s' and email='%s'" % (name, email.lower()) user = databases.db1.accounting.get_user_by_criteria(account_status="ENABLED", criteria=crt)[0] start_work = self.get_reg_email_success(self.driver, email.lower()) self.check_count_roles_and_status(user_id=user["id"], count_roles=2, roles='1,2') self.element_click(self.driver, start_work) # Проверка, что после нажатия на кнопку Начать работу произошел переход обратно на главную url_web = self.driver.current_url.encode('utf-8') err_msg = "Не произошел переход на главную страницу %s, пользователь остался на странице %s" self.assertEqual(url_web, url_main, err_msg % (url_main, url_web)) # Проверка что сформирован хеш для подтеврждения емайл при регистрации criteria = "auth_type='EMAIL_VALIDATION' and account_details_id=%s" % user["id"] auth_user = databases.db1.accounting.get_auths_criteria(criteria)[0] err_msg = "Из БД не получено записей о формировании хеша валидации емайла для user_id=%s" self.assertIsNotNone(auth_user, err_msg % user["id"]) # Проверка статуса отправленного сообщения email_statuses = databases.db6.accounting.get_email_statuses_by_email(user["email"])[0] self.assertEqual(email_statuses["status_id"], 2, "Сообщение не доставлено на mail=%s" % user["email"]) # Проверка отправленного сообщения и ссылки для завершения регистрации hash_value = auth_user["code_value"] emails = databases.db6.accounting.get_emails_by_hash(hash_value)[0] validate_path = self.URL_VALIDATE_EMAIL % hash_value url_validate = self.ENV_BASE_URL + validate_path url_validate_path = url_validate[url_validate.find('//')+2:] err_msg_url = "Полученный урл активации емайла %s не найден в теле отправленного письма id=%s" self.assertIn(url_validate_path, emails["body"], err_msg_url % (url_validate, emails["id"])) work = time.time() messages = None while time.time() - work < self.email_timeout: try: messages = self.get_email(to_email=email) self.assertNotEqual(len(messages), 0, "Не получено сообщение") break except Exception: pass self.assertIsNotNone(messages, "Не получено сообщение") message = messages[0] mail_from = message['From'] mail_body = message['Body'] err_msg_url_1 = "Полученный урл активации емайла %s не найден в теле полученного письма id=%s" #self.assertEqual(mail_subject, 'OORRAA.com - активация аккаунта', "Тема письма: %s" % mail_subject) self.assertIn('*****@*****.**', mail_from, "Почта отправителя: %s" % mail_from) self.assertIn(url_validate_path, mail_body, err_msg_url_1 % (url_validate, mail_body)) # Проверка виджета продавца self.check_header_widget_seller_all(self.driver, user) # Проверка количества новых сообщений в мессенждере self.get_element_navigate(self.driver, self.check_main.COUNT_NEW_MSG % new_messages) # Чтение сообщений self.get_page(self.driver, self.path_chat.URL_CHAT) self.progress(self.driver) msg = self.reading_unread_messages_after_reg(self.driver, new_messages) self.assertEqual(msg, "Сообщения", "Остались непрочитанные %s" % msg) # Переход по ссылке валидации емайла self.get_page(self.driver, validate_path) url_web = self.driver.current_url.encode('utf-8') url_need = self.ENV_BASE_URL + self.path_reg.URL_VALIDATED_EMAIL err_msg = "Урл страницы успешной валидации емайла: %s не соответствует целевому урлу: %s" self.assertEqual(url_web, url_need, err_msg % (url_web, url_need)) # Проверка, что из БД удален активационный хеш criteria = "auth_type='EMAIL_VALIDATION' and account_details_id=%s and creation_timestamp=%s" a_user = databases.db1.accounting.get_auths_criteria(criteria % (user["id"], auth_user["creation_timestamp"])) err_msg = "Из БД не удалена запись о формировании хеша валидации емайла для user_id=%s" self.assertEqual(a_user, list(), err_msg % user["id"]) start_work = self.get_validated_email_success(self.driver) self.element_click(self.driver, start_work) # Проверка, что после нажатия на кнопку Начать работу произошел переход обратно на главную url_web = self.driver.current_url.encode('utf-8') err_msg = "Не произошел переход на главную страницу %s, пользователь остался на странице %s" self.assertEqual(url_web, url_main, err_msg % (url_main, url_web)) # Проверка виджета продавца self.check_header_widget_seller_all(self.driver, user)
def test_smoke_user_work(self): """ Title: Тест сценария работы пользователя. Description: 1. Зайти на сайт oorraa.com.: Проверить наличие кнопки "Вход" Логотипа УУРРАА Пунктов меню, главного меню (Одежда | Обувь и акссесуары | и пр.) 2. Кликнуть на карточку любого товара на странице: Проверить что перешли на нужный товар (название и наличие всех фото) Проверить что хлебные крошки отображаются корректно Проверить что имя продавца отображается корректно Проверить что кнопка "Связаться с продавцом" активная 3. Кликнуть на "Вход" ---> выбрать авторизацию по телефону ---> ввести корректные данные: Проверить что зашли под нужным пользователем (имя и телефон) Проверить наличие иконок "Сообщения" и "Контакты" 4. Выполнить поиск товара Проверить что товар найден в результатах поиска Кликнуть на его карточку: 5. Связаться с продавцом По окончанию перейти в чат и проверить то в области переписки есть сообщение 6. Добавить контакт в контакт-лист Проверить что контакт добавился По окончании нужно удалить добавленный в избранное, контакт 7. Выполнить Logout Проверить что логаут выполнен, есть кнопка "Вход" """ service_log.run(self) ware_for_search = self.wares[0] # 1. Заходим на сайт и выполняем проверку главной страницы. self.go_to_main_page(self.driver) self.check_header_widget_visitor(self.driver) logo_main_page = self.driver.find_element_by_xpath(self.LOGO_HEADER_MAIN_PAGE) self.assertIsNotNone(logo_main_page, u"Not found logo in main page.") self.check_menu_no_prod() # 2. Кликнуть на карточку любого товара на странице # выбираем первый товар в разделе "Одежда" num_element = 1 clothing_ware_1 = MainPage.Path.BLOCK_CLOTHING % num_element obj_clothing_ware_1 = self.get_element_navigate(self.driver, clothing_ware_1) name_ware_from_main_page = obj_clothing_ware_1.text obj_clothing_ware_1.click() breadcrumb_list = self.get_breadcrumb_list(self.driver) # запоминаем хлебные крошки # выковыриваем идентификатор товара из url и берем по нему и по продовцу инфу из БД name_ware = self.get_element_navigate(self.driver, GoodPage.Check.TITLE_WARE) ware_id = name_ware.parent.current_url.split('/')[-1] db_ware_data = databases.db1.warehouse.get_wares_by_ware_id(ware_id) data_user = databases.db1.accounting.get_data_user_by_id(db_ware_data[0]["shop_id"]) name = self.driver.find_element_by_xpath(GoodPage.Check.USER_NAME_SELLER) button = self.driver.find_element_by_xpath(GoodPage.Click.BTN_CALL_SELLER2) # проверка имени продавца, названия товара, наличия self.assertEqual(data_user[0]["display_name"], name.text) self.assertEqual(len(db_ware_data), 1, u"Find several ware with one id.") self.assertEqual(name_ware_from_main_page, name_ware.text) self.assertEqual(len(breadcrumb_list), 3, u"Does not match the number of levels of categories.") self.assertTrue(button.is_displayed(), u"Button is not active.") # 3. Переходим на страницу авторизации self.do_login(self.driver) #self.click_to_phone(self.driver) self.check_page_authorization(self.driver) # Проверка страница авторизации # вводим данные на авторизацию и авторизовываемся user_phone = self.data_auths[0]["phone"][1:] obj_phone, obj_password, obj_submit_button = self.get_data_authorization(self.driver) self.send_password(password_object=obj_password, password_number=self.default_passwd) self.send_phone(phone_object=obj_phone, phone_number=user_phone) self.submit_button(obj_submit_button, sleep=3) # 4. Выполнить поиск товара # Получаем инпут поиска, кнопку поиска с главной страницы, вводим данные и жмем кнопку поиска input_search = self.get_element_navigate(self.driver, self.input_main.SEARCH) btn_search = self.get_element_navigate(self.driver, self.click_main.BTN_SEARCH) input_search.send_keys(ware_for_search["name"].decode('utf-8')) btn_search.click() # Проверяем, что перешли в результаты поиска self.get_element_navigate(self.driver, self.check_search.TITLE_SEARCH) # Ищем на странице товар, заданный в поиске и переходим на страницу товара, проверяем урл страницы и название path_ware = self.click_search.LNK_GOOD_WITH_HREF % (ware_for_search["id"], ware_for_search["name"]) ware_in_search = self.get_element_navigate(self.driver, path_ware) ware_in_search.click() self.check_url_ware(ware_for_search["id"], self.driver.current_url) obj_ware_title = self.get_element_navigate(self.driver, self.check_good.TITLE_GOOD) self.assertEqual(self.get_name(obj_ware_title), ware_for_search["name"]) # 5. Связаться с продавцом data_good, good_str = HelpChatMethods.get_good_data(self.driver) button_call = self.driver.find_element_by_xpath(GoodPage.Click.BTN_CALL_SELLER2) button_call.click() dialog_window = self.driver.find_element_by_xpath(GoodPage.Check.POPUP_MESSAGE_TO_SELLER) button_answer = self.driver.find_element_by_xpath(GoodPage.Click.BTN_ANSWER_TO_SELLER) self.assertIsNotNone(dialog_window, "Not found dialog window for answer seller!") self.assertTrue(button_answer.is_displayed(), "Button is not active.") text = common_utils.random_string(length=50) link_popup = self.check_good.POPUP_MSG_FROM_GOOD % HelpChatMethods.TEXT_MSG_TO_GOOD popup_text = self.get_element_navigate(self.driver, link_popup) HelpProfileSettingsMethods.clear_input_row(self.driver, popup_text) # очищаем сообщение popup_text.send_keys(text) button_answer.click() time.sleep(3) button_go_to_chat = self.driver.find_element_by_xpath(GoodPage.Click.BTN_GO_TO_CHAT) button_go_to_good_page = self.driver.find_element_by_xpath(GoodPage.Click.BTN_GO_TO_GOOD_PAGE) self.assertTrue(button_go_to_chat.is_displayed(), "Button 'go to chat' is not active.") self.assertTrue(button_go_to_good_page.is_displayed(), "Button 'go to good page' is not active.") button_go_to_chat.click() # В чате с продавцом есть отправленное сообщение и карточка товара. Проверить соответствие текста и товара. last_msg = HelpChatMethods.get_last_msg(self.driver) msg_error1 = "Экспресс карточка='%s' не совпадает с последним сообщением='%s'" % (good_str, last_msg) self.assertIn(good_str, last_msg, msg_error1) str_msg_to_good = HelpChatMethods.TEXT_MSG_TO_GOOD.replace(' ', '') msg_error2 = "Сообщение о товаре='%s' не совпадает с последним сообщением='%s'" % (str_msg_to_good, last_msg) self.assertIn(text, last_msg, msg_error2) # 6. Добавить контакт в контакт-лист HelpUserContactsMethods.click_in_contact(self.driver, ware_for_search["store_id"]) # переходим в избранное и удаляем пользователя self.get_page(self.driver, self.path_user_contact.URL_FAVORITES_USERS) data_user = databases.db1.accounting.get_data_user_by_id(ware_for_search["store_id"]) HelpUserContactsMethods.delete_first_user_in_cl(self.driver, fav_user=data_user[0]) # 7. Выполнить Logout и выполнить проверку. self.driver.refresh() Navigate.progress(self.driver) self.logout(self.driver) logo_main_page = self.driver.find_element_by_xpath(self.LOGO_HEADER_PAGE) self.assertIsNotNone(logo_main_page, u"Not found logo in main page.") self.go_to_main_page(self.driver) self.check_header_widget_visitor(self.driver) self.check_menu_no_prod()