def test_restorePassword_by_phone_incorrect_user_wait_for_registration(self, status='WAIT_FOR_REGISTRATION'): """ Title: Я не могу восстановить пароль по номеру телефона, если мой пользователь не окончил регистрацию в прошлый раз (WAIT_FOR_REGISTRATION) Description: * Отображается сообщение "Вы не закончили регистрацию" """ service_log.run(self) self.go_authorization_page(self.driver) self.go_restore_page(self.driver) self.click_to_phone(self.driver) phone, sent_passwd_button = self.get_data_restore(self.driver) user = databases.db1.accounting.get_not_enabled_user(status)[0] AccountingMethods.save_user_password(user_id=user["id"], hash_passwd=user["code_value"], salt=user["salt"]) phone.send_keys(user["phone"][1:]) self.click_button(sent_passwd_button, sleep=0.5) user_new_info = databases.db1.accounting.get_data_accounts_by_user_id_and_status(user["id"], status)[0] msg_error1 = "ОШИБКА: Хеши паролей не совпадают. Пароль изменился" self.assertEqual(user["code_value"], user_new_info["code_value"], msg_error1) # сравниваем хеш нового и старого пароля msg_error2 = "ОШИБКА: Соль паролей не совпадает. Пароль изменился" self.assertEqual(user["salt"], user_new_info["salt"], msg_error2) self.check_message_error_by_status_user(self.driver, status)
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 test_restorePassword_by_phone_incorrect_password(self): """ Title: Я не могу войти в систему, если некорректно введу полученный при восстановлении по телефону пароль. Description: * Отобразится сообщение "Пароль неверен" """ service_log.run(self) password = ['incorrect pass', '123'] self.go_authorization_page(self.driver) self.go_restore_page(self.driver) self.click_to_phone(self.driver) phone, sent_passwd_button = self.get_data_restore(self.driver) user = databases.db1.accounting.get_users_with_status()[0] AccountingMethods.save_user_password(user_id=user["id"], hash_passwd=user["code_value"], salt=user["salt"]) default_new_passwd = AccountingMethods.get_default_password(4) override_passwd_hash = generate_sha256(default_new_passwd, user["salt"]) databases.db1.accounting.update_passwd_hash_by_phone(passwd_hash=override_passwd_hash, phone=user["phone"]) # вводим номер телефона phone.send_keys(user["phone"][1:]) self.click_button(sent_passwd_button) self.check_password_is_sent(self.driver) pass_input = self.get_pass_input(self.driver) submit_button = self.get_login(self.driver) self.check_form_sent_passwd(self.get_form_note(self.driver)) pass_input.send_keys(password[1]) self.click_button(submit_button) time.sleep(1) self.check_incorrect_passwd_or_phone(self.driver)
def setUp(cls): # Подготовка работы с selenium cls.driver = HelpLifeCycleCheckMethods.get_driver() service_log.preparing_env(cls) # Настройка окружения и вспомогательные параметры cls.default_user_id = AccountingMethods.get_default_user_id(role="buyer") databases.db1.accounting.update_account_details_by_criteria(cls.default_user_id, "locale='ru'") cls.user = databases.db1.accounting.get_user_by_account_id(cls.default_user_id)[0] AccountingMethods.save_user_password(user_id=cls.user["id"], hash_passwd=cls.user["code_value"]) # Устанавливаем новый пароль для пользователя cls.default_new_passwd = AccountingMethods.get_default_password() hash_res_new = generate_sha256(cls.default_new_passwd, cls.user["salt"]) databases.db1.accounting.update_user_password(cls.user["id"], hash_res_new) cls.go_main(cls.driver, phone=cls.user["phone"], passwd=cls.default_new_passwd, flag_auth=True) # Переход в Контакты # cls.get_page(cls.driver, cls.path_user_contact.URL_FAVORITES_USERS) # Переход по кнопке Новый контакт # cls.get_element_navigate(cls.driver, cls.click_user_contact.BTN_NEW_CONTACT).click() # cls.input_phone = cls.get_element_navigate(cls.driver, cls.input_user_contact.PHONE) # Получить список пользователей в контактах у пользователя cls.fav_users_list = databases.db1.accounting.get_fav_user_by_user_id(cls.user["id"]) l = lambda l: list() if cls.fav_users_list is None else cls.fav_users_list cls.fav_list = [str(value["favorites_account_id"]) for value in l(cls.fav_users_list)] # чтобы исключить попадание себя в список контактов cls.fav_list.append(str(cls.user["id"]))
def test_authorization_by_email_incorrect_user_disabled(self): """ Title: Я не могу войти в систему по e-mail, если мой пользователь в статусе DISABLED (пользователь Заблокирован) Description: * Отображается соответствующее сообщение """ service_log.run(self) criteria = "display_name is not NULL" stamp = str(time.time()) email = "*****@*****.**" % stamp user = databases.db1.accounting.get_user_by_criteria(account_status="DISABLED", criteria=criteria)[0] databases.db1.accounting.update_account_details_by_criteria(user["id"], "email='%s'" % email) 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(self.default_new_passwd, user["salt"]) databases.db1.accounting.update_user_password(user["id"], hash_res_new) 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(email) auth_form["password_input"].send_keys(default_new_passwd) self.click_button(auth_form["login_btn"]) self.get_element_navigate(self.driver, self.check_auth.ERR_CHECK_DISABLED) self.go_to_main_page(self.driver) self.check_header_widget_visitor(self.driver)
def test_restore_by_email_incorrect_user_disabled(self, status='DISABLED'): """ Title: Я не могу восстановить пароль по e-mail, если мой пользователь заблокирован (Disabled) """ service_log.run(self) self.go_authorization_page(self.driver) self.go_restore_page(self.driver) restore_form = self.get_restore_email_form(self.driver) user = databases.db1.accounting.get_not_enabled_user(status)[0] email = self.get_new_email(databases.db1) databases.db1.accounting.update_account_details_by_criteria(user["id"], "email='%s'" % email.lower()) AccountingMethods.save_user_password(user_id=user["id"], hash_passwd=user["code_value"], salt=user["salt"]) self.input_str(restore_form['email_input'], email) self.element_click(self.driver, restore_form['restore_btn'], change_page_url=False) user_new_info = databases.db1.accounting.get_data_accounts_by_user_id_and_status(user["id"], status)[0] msg_error1 = "ОШИБКА: Хеши паролей не совпадают. Пароль изменился" self.assertEqual(user["code_value"], user_new_info["code_value"], msg_error1) # сравниваем хеш нового и старого пароля msg_error2 = "ОШИБКА: Соль паролей не совпадает. Пароль изменился" self.assertEqual(user["salt"], user_new_info["salt"], msg_error2) self.check_message_error_by_status_user(self.driver, status)
def test_authorization_by_phone_incorrect_user_wait_for_registration(self, type_password="******"): """ Title: Я не могу войти в систему по телефону, если мой пользователь в статусе WAIT_FOR_REGISTRATION (пользователь не закончил регистрацию) Description: * Отображается соответствующее сообщение """ service_log.run(self) status = "WAIT_FOR_REGISTRATION" 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) # Проверка пользователя с незаконченной регистрацией self.check_user_wait_for_registration(self.driver)
def setUp(cls): # Настройка окружения и вспомогательные параметры default_user_id = AccountingMethods.get_default_user_id(role='seller') cls.user = databases.db1.accounting.get_user_by_account_id(default_user_id)[0] cls.payment_db = databases.db1.accounting.get_payment_details_by_user_id(default_user_id) databases.db1.accounting.update_account_details_by_criteria(default_user_id, "locale='ru'") AccountingMethods.save_user_password(user_id=cls.user["id"], hash_passwd=cls.user["code_value"], salt=cls.user["salt"]) # Подготовка работы с selenium cls.driver = HelpLifeCycleCheckMethods.get_driver() service_log.preparing_env(cls) # Устанавливаем новый пароль для пользователя default_new_passwd = AccountingMethods.get_default_password() hash_res_new = generate_sha256(default_new_passwd, cls.user["salt"]) databases.db1.accounting.update_user_password(cls.user["id"], hash_res_new) cls.go_to_main_page(cls.driver) cls.go_main(cls.driver, phone=cls.user["phone"], passwd=default_new_passwd, flag_api=False) # Переход на страницу Оплата и выключение всех настроек оплаты cls.get_page(cls.driver, cls.path_settings.URL_PAYMENT_INFO) payment_info = cls.get_status_payment_options(cls.payment_db) payments = cls.get_payment_form(cls.driver, payment_info) cls.change_all_payment_options(cls.driver, payment_info, drop=True) cls.click_button(payments["save_btn"]) cls.element_is_present(cls.driver, cls.check_settings.CHANGE_PAYMENTS_SUCCESS)
def test_as_buyer_to_inactive_good(self): """ 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) list_good_id = self.get_good_id_from_page_source(self.driver, self.path_shop.TO_FIND_GOODS) self.good_id = list_good_id[0] ware_cassandra = databases.db7.warehouse.get_wares_by_ware_id(self.good_id)[0] self.update_data_content(ware_cassandra, self.deserialize_content(ware_cassandra['content'])) # Меняем статус на BANNED services.warehouse.root.tframed.makeModeration(self.good_id, False, self.moderator_id) self.get_page(self.driver, self.path_good.URL_GOOD % self.good_id) self.data_good, good_str = self.get_good_data(self.driver) self.get_element_navigate(self.driver, self.click_good.BTN_CALL_SELLER_HOLD)
def test_restorePassword_by_phone_resend_password(self): """ Title: Я могу запросить Повторную отправку пароля, при восстановлении пароля по телефону Description: * Отображается соответствующее сообщение """ service_log.run(self) self.go_authorization_page(self.driver) self.go_restore_page(self.driver) self.click_to_phone(self.driver) phone, sent_passwd_button = self.get_data_restore(self.driver) user = databases.db1.accounting.get_for_restore()[0] AccountingMethods.save_user_password(user_id=user["id"], hash_passwd=user["code_value"], salt=user["salt"]) phone.send_keys(user["phone"][1:]) self.click_button(sent_passwd_button) self.check_password_is_sent(self.driver) self.check_form_sent_passwd(self.get_form_note(self.driver)) data1 = databases.db1.accounting.get_sms(phone=user["phone"])[0] self.check_sms_status(data1) not_get_passwd = self.get_message_have_not_receiver_passwd(self.driver) self.click_button(not_get_passwd) self.check_instruction_not_receiver_passwd(self.driver) self.click_button(self.get_repeat_send_passwd(self.driver)) data2 = databases.db1.accounting.get_sms(phone=user["phone"])[0] self.check_sms_status(data2) new_passwd1 = data1["message"][-5:] new_passwd2 = data2["message"][-5:] msg_error = "ОШИБКА: Первый высланный пароль совпадает с повторно высланным паролем" self.assertNotEqual(new_passwd1, new_passwd2, msg_error)
def test_registration_by_phone_incorrect_password(self): """ Title: Я не могу зарегистрироваться, если некорректно введу полученный пароль. Отобразится сообщение "Пароль неверен" """ service_log.run(self) user_name = 'Vasya vvedet parol 6 simvolov' login = str(random.randrange(1000000000, 7007777777, 1)) self.get_page(self.driver, self.path_reg.URL_REG) self.click_to_phone(self.driver) obj_phone, obj_username, obj_submit_button = self.get_data_registration(self.driver) # Вводим имя пользователя, пароль obj_username.send_keys(user_name) obj_phone.send_keys(login) self.click_button(obj_submit_button) info_user = databases.db1.accounting.get_data_user_by_phone('7' + login)[0] # salt password_field = self.get_name_pass(self.driver) # password AccountingMethods.save_user_password(info_user["id"], info_user["code_value"], info_user["salt"]) # генерируем новый пароль и подменяем на него password = AccountingMethods.get_default_password(5) hash_res_new = generate_sha256(password, info_user["salt"]) databases.db1.accounting.update_user_password(info_user["id"], hash_res_new) databases.db1.accounting.update_user_salt(info_user["id"], info_user["salt"]) # вставляем пароль и пробуем зарегистрироваться password_field.send_keys(password) ok_button = self.get_submit_ok(self.driver) self.click_button(ok_button) self.check_not_right_password(self.driver)
def test_restorePassword_by_phone_form_empty_password(self): """ Title: Если не введен пришедший по смс пароль. Отображается сообщение "Введите пароль" """ service_log.run(self) password = ['empty pass', ''] self.go_authorization_page(self.driver) self.go_restore_page(self.driver) self.click_to_phone(self.driver) phone, sent_passwd_button = self.get_data_restore(self.driver) user = databases.db1.accounting.get_users_with_status()[0] AccountingMethods.save_user_password(user_id=user["id"], hash_passwd=user["code_value"], salt=user["salt"]) default_new_passwd = AccountingMethods.get_default_password(4) override_passwd_hash = generate_sha256(default_new_passwd, user["salt"]) databases.db1.accounting.update_passwd_hash_by_phone(passwd_hash=override_passwd_hash, phone=user["phone"]) # вводим номер телефона phone.send_keys(user["phone"][1:]) self.click_button(sent_passwd_button) self.check_password_is_sent(self.driver) pass_input = self.get_pass_input(self.driver) submit_button = self.get_login(self.driver) self.check_form_sent_passwd(self.get_form_note(self.driver)) pass_input.send_keys(password[1]) submit_button.click() time.sleep(1) self.check_need_password(self.driver)
def setUp(cls): # Настройка окружения и вспомогательные параметры default_user_id = AccountingMethods.get_default_user_id(role='seller') cls.user = databases.db1.accounting.get_user_by_account_id(default_user_id)[0] databases.db1.accounting.update_account_details_by_criteria(default_user_id, "locale='ru'") AccountingMethods.save_user_password(user_id=cls.user["id"], hash_passwd=cls.user["code_value"], salt=cls.user["salt"]) # Подготовка работы с selenium cls.driver = HelpLifeCycleCheckMethods.get_driver() service_log.preparing_env(cls)
def setUp(cls): # Заданные параметры cls.type_phone = "PHONE_VALID" # Настройка окружения и вспомогательные параметры user_id = AccountingMethods.get_default_user_id() cls.user = databases.db1.accounting.get_user_by_criteria_only(criteria="id=%s" % user_id)[0] AccountingMethods.save_user_password(user_id=cls.user["id"], hash_passwd=cls.user["code_value"]) # Подготовка работы с selenium cls.driver = cls.get_driver() service_log.preparing_env(cls)
def auth(self, role): # Настройка окружения и вспомогательные параметры self.default_user_id = AccountingMethods.get_default_user_id(role=role) 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] 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) return self.user
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_as_buyer_to_good(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'])) # Проверка текста в попапе obj_text = self.get_element_navigate(self.driver, self.check_good.POPUP_MSG_FROM_GOOD % '') str_msg_to_good = obj_text.text.encode('utf-8').replace(' ', '') 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_good) #После нажатия на "На карточку" я остаюсь на карточке этого же товара self.assertEqual(self.data_good["good_id"], self.driver.current_url[self.driver.current_url.rfind('/') + 1:]. encode('utf-8')) # Кнопка "Связаться с продавцом" на карточке товара активна. self.get_element_navigate(self.driver, self.click_good.BTN_CALL_SELLER) # В чате с продавцом есть отправленное от меня сообщение и карточка товара. Проверить соответствие. self.get_page(self.driver, self.path_chat.URL_CHAT_WITH_USER % self.default_seller_id) last_msg = self.get_last_msg(self.driver) self.assertIn(good_str, last_msg, "Экспресс карточка='%s' не совпадает с последним сообщением='%s'" % (good_str, last_msg)) self.assertIn(str_msg_to_good, last_msg, "Стандартное сообщение о товаре='%s' не совпадает с последним " "сообщением='%s'" % (str_msg_to_good, last_msg))
def setUp(cls): # Подготовка работы с selenium cls.driver = HelpLifeCycleCheckMethods.get_driver() service_log.preparing_env(cls) # Берем тестового продавца на магазине которого будут проводиться проверки cls.default_test_seller_id = AccountingMethods.get_default_user_id(role='seller_alien') cls.user = databases.db1.accounting.get_user_by_criteria(account_status='ENABLED', criteria='id=%s' % cls.default_test_seller_id)[0] AccountingMethods.save_user_password(user_id=cls.user["id"], hash_passwd=cls.user["code_value"]) # Устанавливаем новый пароль для пользователя default_new_passwd = AccountingMethods.get_default_password() hash_res_new = generate_sha256(default_new_passwd, cls.user["salt"]) databases.db1.accounting.update_user_password(cls.user["id"], hash_res_new) cls.go_main(cls.driver, phone=cls.user["phone"], passwd=default_new_passwd, flag_auth=True)
def setUp(cls): # Подготовка работы с selenium cls.driver = HelpLifeCycleCheckMethods.get_driver() service_log.preparing_env(cls) # Настройка окружения и вспомогательные параметры cls.default_user_id = AccountingMethods.get_default_user_id(role="buyer") databases.db1.accounting.update_account_details_by_criteria(cls.default_user_id, "locale='ru'") cls.user = databases.db1.accounting.get_user_by_account_id(cls.default_user_id)[0] AccountingMethods.save_user_password(user_id=cls.user["id"], hash_passwd=cls.user["code_value"]) # Устанавливаем новый пароль для пользователя cls.default_new_passwd = AccountingMethods.get_default_password() hash_res_new = generate_sha256(cls.default_new_passwd, cls.user["salt"]) databases.db1.accounting.update_user_password(cls.user["id"], hash_res_new) cls.go_main(cls.driver, phone=cls.user["phone"], passwd=cls.default_new_passwd, flag_auth=True) cls.get_page(cls.driver, cls.path_user_contact.URL_FAVORITES_USERS)
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 setUp(cls): # Подготовка работы с selenium cls.driver = HelpLifeCycleCheckMethods.get_driver() # Переходим на главную cls.go_to_main_page(cls.driver) # Настройка окружения и вспомогательные параметры cls.default_user_id = AccountingMethods.get_default_user_id(role='seller') databases.db1.accounting.update_account_details_by_criteria(cls.default_user_id, "locale='ru'") cls.user = databases.db1.accounting.get_user_by_criteria_only("id=%s" % cls.default_user_id)[0] AccountingMethods.save_user_password(user_id=cls.user["id"], hash_passwd=cls.user["code_value"], salt=cls.user["salt"]) # Устанавливаем новый пароль для пользователя cls.default_new_passwd = AccountingMethods.get_default_password() hash_res_new = generate_sha256(cls.default_new_passwd, cls.user["salt"]) databases.db1.accounting.update_user_password(cls.user["id"], hash_res_new) service_log.preparing_env(cls)
def test_user_card_buyer(self): """ Title: Виджет "Профиль пользователя" - покупатель """ # Берем тестового окупателя на магазине которого будут проводиться проверки self.default_test_seller_id = AccountingMethods.get_default_user_id(role='buyer') self.user = databases.db1.accounting.get_user_by_criteria(account_status='ENABLED', criteria='id=%s' % self.default_test_seller_id)[0] AccountingMethods.save_user_password(user_id=self.user["id"], hash_passwd=self.user["code_value"]) # Устанавливаем новый пароль для пользователя 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_auth=True) time.sleep(5) self.move_to_elem(self.driver, self.path_main.WIDGET_USER) self.check_user_card_in_widget_buyer(self.driver, self.user)
def test_seller_card_for_seller(self, test_good=HND.SHP_TO_GOOD): """ Title: Проверка карточки магазина на странице товара для продавца своего товара """ AccountingMethods.save_user_password(user_id=self.user["id"], hash_passwd=self.user["code_value"]) # Устанавливаем новый пароль для пользователя 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_auth=True) # Переход на страницу магазина self.get_page(self.driver, HND.path_shop.URL_SHOP % self.default_test_seller_id) self.check_navigate_in_good_page(self.driver, test_good, 1) self.user = databases.db1.accounting.get_user_by_criteria(account_status='ENABLED', criteria='id=%s' % self.default_test_seller_id)[0] self.check_shop_card_in_good_page_for_seller(self.driver, self.shop, self.user["id"])
def test_contact_the_seller(self): """ Title: Я, как Покупатель, могу отправить продавцу сообщение по Активному товару, нажав на "Связаться с продавцом" Description: Проверяется только действие, состав UI форм проверяется ниже отдельно Проверить: * После нажатия кнопки открывается окно "Связаться с продавцом" * После ввода и отправки сообщения отображается окно "Сообщение отправлено" * В чате с продавцом есть отправленное от меня сообщение и карточка товара. Проверить соответствие текста и товара. """ AccountingMethods.save_user_password(user_id=self.buyer["id"], hash_passwd=self.buyer["code_value"], salt=self.buyer["salt"]) # Устанавливаем новый пароль для пользователя default_new_passwd = AccountingMethods.get_default_password() hash_res_new = generate_sha256(default_new_passwd, self.buyer["salt"]) databases.db1.accounting.update_user_password(self.buyer["id"], hash_res_new) # Получить страницу авторизации self.get_page(self.driver, self.path_auth.PATH_AUTH) obj_phone, obj_password, obj_submit_button = self.get_data_authorization(self.driver) # Вводим данные на авторизацию self.send_phone(phone_object=obj_phone, phone_number=self.buyer["phone"]) self.send_password(password_object=obj_password, password_number=default_new_passwd) # Нажатие на кнопку авторизации self.element_click(self.driver, obj_submit_button, change_page_url=True) self.is_logged(self.driver) self.get_page(self.driver, self.path_good.URL_GOOD % self.good['ware_id']) self.element_click(self.driver, self.click_good.BTN_CALL_SELLER, change_page_url=False) popup = self.get_form_call_seller(self.driver) card_good = popup["good"].text msg_text = u"Calling_to_seller_%s" % str(time.time()) self.input_str(popup["input_message"], msg_text) self.element_click(self.driver, popup["btn_send"], change_page_url=False) success_popup = self.get_form_call_success(self.driver) self.element_click(self.driver, success_popup["btn_close"], change_page_url=False) self.get_page(self.driver, self.path_chat.URL_CHAT_WITH_USER % self.seller_id) messages = self.elements_is_present(self.driver, self.check_chat.LAST_MSG_WITH_SEPARATOR) self.assertIn(self.buyer['display_name'], messages[0].text, "The message was not sent from me") self.assertIn(card_good, messages[0].text, "Card good in popup not equal card good in chat") self.assertIn(self.buyer['display_name'], messages[1].text, "The message was not sent from me") self.assertIn(msg_text, messages[1].text, "Text message in popup not equal text message in chat")
def setUp(cls): # Подготовка работы с selenium cls.driver = cls.get_driver() service_log.preparing_env(cls) # Настройка окружения и вспомогательные параметры default_user_id = AccountingMethods.get_default_user_id(role='seller') cls.user = databases.db1.accounting.get_user_by_account_id(default_user_id)[0] databases.db1.accounting.update_account_details_by_criteria(default_user_id, "locale='ru'") AccountingMethods.save_user_password(user_id=cls.user["id"], hash_passwd=cls.user["code_value"]) # Устанавливаем новый пароль для пользователя default_new_passwd = AccountingMethods.get_default_password() hash_res_new = generate_sha256(default_new_passwd, cls.user["salt"]) databases.db1.accounting.update_user_password(cls.user["id"], hash_res_new) cls.go_main(cls.driver, phone=cls.user["phone"], passwd=default_new_passwd, flag_auth=True) # Ждем, чтобы страница подгрузилась time.sleep(HelpNavigateData.time_sleep)
def test_as_seller_own_good(self, test_good=HelpNavigateCheckMethods.SHP_TO_GOOD): """ Title: Я, как Продавец на картчоке по своему Активному товару, не могу "Связаться с продавцом" т.к. кнопка залочена """ databases.db1.accounting.update_account_details_by_criteria(self.default_seller_id, "locale='ru'") self.user = databases.db1.accounting.get_user_by_account_id(self.default_seller_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) self.get_element_navigate(self.driver, self.click_good.BTN_CALL_SELLER_HOLD)
def setUp(cls): # Подготовка работы с selenium driver = webdriver.Chrome(CHROMEDRIVER_PATH) driver.implicitly_wait(time_to_wait=HelpNavigateData.timeout) driver.maximize_window() cls.driver = driver service_log.preparing_env(cls) # Берем тестового продавца на магазине которого будут проводиться проверки test_seller_id = AccountingMethods.get_default_user_id(role='seller') user = databases.db1.accounting.get_user_by_account_id(test_seller_id)[0] 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) cls.go_main(cls.driver, phone=user["phone"], passwd=default_new_passwd, flag_auth=True) cls.get_page(cls.driver, cls.path_my_goods.URL_ADD_GOOD)
def setUp(cls): # Подготовка работы с selenium cls.driver = HelpLifeCycleCheckMethods.get_driver() service_log.preparing_env(cls) # Настройка окружения и вспомогательные параметры cls.default_user_id = AccountingMethods.get_default_user_id(role='buyer') cls.default_seller_id = AccountingMethods.get_default_user_id(role='seller') cls.default_seller_own_id = AccountingMethods.get_default_user_id(role='seller_alien') cls.moderator_id = int(AccountingMethods.get_default_user_id(role='moderator')) databases.db1.accounting.update_account_details_by_criteria(cls.default_seller_id, "locale='ru'") cls.user = databases.db1.accounting.get_user_by_account_id(cls.default_seller_id)[0] AccountingMethods.save_user_password(user_id=cls.user["id"], hash_passwd=cls.user["code_value"]) # Устанавливаем новый пароль для пользователя cls.default_new_passwd = AccountingMethods.get_default_password() hash_res_new = generate_sha256(cls.default_new_passwd, cls.user["salt"]) databases.db1.accounting.update_user_password(cls.user["id"], hash_res_new) # Переходим на страницу авторизации cls.get_auth_page(cls.driver) cls.click_to_phone(cls.driver) obj_phone, obj_password, obj_submit_button = cls.get_data_authorization(cls.driver) # Вводим данные на авторизацию cls.send_phone(phone_object=obj_phone, phone_number=cls.user["phone"][1:]) cls.send_password(password_object=obj_password, password_number=cls.default_new_passwd) # Нажатие на кнопку авторизации cls.submit_button(obj_submit_button) url_main = cls.driver.current_url.encode('utf-8') header_chat = cls.get_element_navigate(cls.driver, cls.click_main.HEADER_WIDGET_CHATS) cls.click_button(header_chat) url_chat = cls.driver.current_url.encode('utf-8') cls.assertNotEqual(url_main, url_chat, "Переход на страницу Сообщения не произошел, текущий урл:%s" % url_chat) cls.progress(cls.driver)